3

ActiveMQの耐久性のあるクライアントに問題があります。Pythonでstomp.pyを使用しています。

 conn.start()
 conn.connect(wait=True, header = {'client-id': 'myhostname' })
 conn.subscribe(
            '/topic/testTopic', ack='auto',
            headers = {
                'activemq.subscriptionName': 'myhostname',
                'selector': "clientid <> '%s'" % 'myhostname'
            }
)

コードからわかるように、clientIdを自分のホスト名に設定しています。添付のスクリーンショット(下)に示されているように、clientIdは「ID:Atlas....」のように表示されます。

問題は、stomp.pyベースのクライアントを切断するたびに、次に再接続したときに新しい「clientId」を取得することです。これにより、ActiveMQのサブスクライバーのリストがいっぱいになります:( 代替テキスト 上の画像は、ActiveMQブローカーのサブスクライバーを示しています。次に切断してから接続しても、上記のエントリはそのまま残り、別のエントリが追加されます。すぐにリスト内の多くのサブスクライバー)。

奇妙なことに、セレクターは100%動作します(<>を=に変更して、メッセージが返されるようにすることで確認します)。したがって、clientIdは何らかの形で動作している必要があります。

4

1 に答える 1

3

私はそれを解決しました、すべては単純なスペルミスによるものでした。この線:

conn.connect(wait=True, header = {'client-id': 'myhostname' })

複数形の「ヘッダー」を含める必要があります。

于 2010-09-25T20:17:19.280 に答える