0

複数のトピックからのメッセージを消費し、メッセージを変換してから複数のトピックに公開するアプリケーションを構築しています。connectionfactory オブジェクトを検索した後、このコードを使用しています

Connection con = cf.createConnection();
String clientId = "APP"+ con.hashCode();
con.setClientId(clientId);

永続的なサブスクリプションを作成している間、私はこの MessageConsumer consumer = session.CreateDurableSubscriber(topic,"DurableSubscribtion"+clientId, topic.getSelector, true); を使用しています。

すべての接続には、一意のクライアント ID とサブスクリプション名が必要です。

接続が閉じられた後、新しく作成された接続の hashCode を使用して同じサブスクリプションに再度アクセスしようとしましたが、このアプローチは機能しますか? または、SUBSCRIBER1、SUBSCRIBER3、SUBSCRIBER2 などのサブスクリプション名を指定する必要がありますか?

4

1 に答える 1

0

ええ、次回同じクライアント ID を提示できるように、「反復可能な」クライアント ID を指定する必要があります。そうしないと、サブスクリプションの負荷 (おそらく Integer.MAX_VALUE ?) が作成され、すべてが無効になります。

意味のある命名スキームを考案する必要があります。たとえば、サブスクライブしているトピックごとにサブスクライバーがいる場合は、クライアント ID に<topic_name> + "durSub-Admin"などの名前を付けます。

ActiveMQ を使用している場合、これは VirtualTopics のおかげで少し簡単になります

于 2013-04-25T22:28:37.490 に答える