1

我需要删除/删除我的主题订阅者。我找到了这个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
}

更新

我们的场景非常简单。

  1. 客户端构建了一个队列并订阅了一个主题的消费者。
  2. 客户端关闭了连接。
  3. 删除服务器端的消费者(如上次更新中的示例代码)

这是通过 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);
4

1 回答 1

1

要从 NMS API 中删除持久订阅,请使用DeleteDurableConsumerISession 中定义的方法。您必须从使用与创建订阅时使用的相同客户端 ID 的连接调用此方法,并且您传递要删除的订阅的名称。如果存在活动订阅者,该方法将失败,但请为该异常做好准备。

在示例代码中,您没有在连接上设置客户端 ID。使用持久订阅时,您必须、必须、必须始终使用相同的客户端 ID 和订阅名称。因此,在您将客户端 ID 设置为与最初创建订阅的连接相同的值之前,您将收到此错误。

于 2013-04-22T19:34:03.613 回答