トピック サブスクライバーを削除する必要があります。私はこれを見つけましたhttp://activemq.apache.org/manage-durable-subscribers.html
しかし、それは私たちにとって十分ではありません。メッセージの有無に関係なく、サブスクライバーを削除するタイミングを制御したいと考えています。また、私たちのプログラムは C# で書かれています。したがって、私たちにとって最適なソリューションは NMS API です。
ありがとう。
コードは次のとおりです。
Apache.NMS.ActiveMQ.ConnectionFactory factory = new Apache.NMS.ActiveMQ.ConnectionFactory(m_brokerURI);
m_connection = factory.CreateConnection(username, password);
Apache.NMS.ActiveMQ.Connection con = (Apache.NMS.ActiveMQ.Connection)m_connection;
ISession session = m_connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
try
{
session.DeleteDurableConsumer(strQueueName);
}
catch (Exception ex)
{
// log the error message
}
アップデート
私たちのシナリオは非常に単純です。
- クライアントがキューを作成し、トピックでコンシューマーをサブスクライブしました。
- クライアント側が接続を閉じました。
- サーバー側のコンシューマーを削除します (前回の更新のサンプル コードのように)
jconsole 経由の activemq ブローカーのスナップショットは次のとおりです。 jconsole スナップショット
次の方法でサブスクライバー「7B0FD84D-6A2A-4921-967F-92B215E22751」を削除したいと考えていますが、常にこのエラー「javax.jms.InvalidDestinationException : 永続的なサブスクリプションが存在しません: 7B0FD84D-6A2A-4921-967F-92B215E22751」が発生しました。
strSubscriberName = “7B0FD84D-6A2A-4921-967F-92B215E22751”
session.DeleteDurableConsumer(strSubscriberName);