2017-10-30 17 views
1

耐久性のあるトピックのjmsトピックサブスクライバを書くときにclientIdとサブスクリプション名を設定する必要があることを理解しています。JMSパブリッシャ/コンシューマのclientIDを設定する目的は何ですか?

しかし、TOPICを公開するときにclientIDを設定する目的は何ですか?私は人々が出版社/消費者のためにクライアントIDを設定しているのを見ましたが、なぜそれが必要なのか誰も説明しませんでした。

ConnectionFactory conFactory = this.getConnectionFactory(); 
Connection connection = conFactory.createConnection(); 

connection.setClientID("WHATS_MY_PURPOSE"); // Why do we need clientID while publishing the TOPIC from consumer/publisher 

connection.start(); 
MessageProducer producer = session.createProducer(destination); 

答えて

2

clientIdは、アプリケーションを一意に識別するために必要です。 Pub/Subメッセージングパターンで永続的なサブスクリプションを使用する場合は必須です。ご存知のように、メッセージングプロバイダは、オフラインのときに永続サブスクライバアプリケーション向けのパブリケーションをキャッシュします。そのようなアプリケーションが再びオンラインになると、メッセージングプロバイダはOK, this is the same application that created a durable subscription but went away for reason. Now it has come back. So let me deliver all messages that were published when this application was awayを識別しなければなりません。それが同じアプリケーションであることを確認するために、メッセージングプロバイダーは、アプリケーションのclientIdと、キャッシュされたサブスクリプション情報で利用可能なclientIdを比較します。

+0

あなたがここで参照しているアプリケーションですか?加入者は私が考える?クライアントIDを取得する必要がある契約者についての質問はありません。 しかし、どのように出版社にとって重要なのでしょうか?サイト運営者がクライアントIDを持っていますか? – user3007165

+0

JMS 1.1仕様によると、永続的なサブスクライバアプリケーションです。 JMSがAPI仕様であるため、一部のメッセージングプロバイダが他の目的にも使用する可能性があります。私は誰にも気づいていない。 – Shashi

+0

これは私のシナリオです。 1. Publisherは、キューにメッセージを送信し、クライアントIDを設定する(ABCと言う)だけでなく 2.耐久性のある加入者は、クライアントIDとそのメッセージを選んでいる(ABCを言う) 上記いずれかの問題なく正常に動作していますさ。 しかし、パブリッシャーからのclientIDの設定をやめて、サブスクライバーのclientIDだけを設定しても、うまくいきます。下の状況も問題なく動作しています。 1. Publisherは 2.耐久性のある加入者は、クライアントIDとそのメッセージを選んでいるクライアントIDを設定せずにキューにメッセージを送信している私は上記に述べたように、それはのclientIdを設定するには、出版社のために必要とされていない – user3007165

関連する問題