我需要删除/删除我的主题订阅者。我发现了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 snapshot
我们想通过以下方法删除订户“7B0FD84D-6A2A-4921-967F-92B215E22751”, 但总是得到这个错误“javax.jms.InvalidDestinationException:不存在持久订阅:7B0FD84D-6A2A-4921-967F-92B215E22751”
strSubscriberName = “7B0FD84D-6A2A-4921-967F-92B215E22751”
session.DeleteDurableConsumer(strSubscriberName);
答案 0 :(得分:1)
要从NMS API删除持久订阅,请使用ISession中定义的DeleteDurableConsumer
方法。您必须从使用与创建订阅时使用的客户端ID相同的客户端ID的Connection调用此方法,并传递要删除的订阅的名称。如果存在活动订户,则该方法将失败,因此请为该异常做好准备。
在示例代码中,您未在连接上设置客户端ID。使用持久订阅时,您必须始终使用相同的客户端ID和订阅名称。因此,在您将同样的情况下,您将获得此错误,直到您将客户端ID设置为与首先创建订阅的连接相同的值。