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は何らかの形で動作している必要があります。