【问题标题】:How can I delete/remove an ActiveMQ subscriber using NMS API如何使用 NMS API 删除/移除 ActiveMQ 订阅者
【发布时间】:2013-04-15 04:36:43
【问题描述】:

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

我们想通过以下方法删除订阅者“7B0FD84D-6A2A-4921-967F-92B215E22751”, 但总是收到此错误“javax.jms.InvalidDestinationException:不存在持久订阅:7B0FD84D-6A2A-4921-967F-92B215E22751”

strSubscriberName = “7B0FD84D-6A2A-4921-967F-92B215E22751”
session.DeleteDurableConsumer(strSubscriberName);

【问题讨论】:

  • strQueueName 让我相信您传递的是队列的名称,而不是持久订阅者的订阅名称。
  • 更新了我的答案以反映我对代码的审查。

标签: activemq subscriber apache-nms


【解决方案1】:

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

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

【讨论】:

  • 我们总是收到这样的错误:“javax.jms.InvalidDestinationException:不存在持久订阅:31E8E994-7276-4E4A-8F18-EA507448535E”。我们使用 GUID 作为订阅者名称,并从 JConsole 复制名称。所以它不应该是一个错字的问题。我们还使客户端脱机,因此它应该是您提到的非活动订阅者。我们错过了什么吗?
  • 我的魔法八球说,所有迹象都指向我的密码。
  • 那个小sn-p并没有真正告诉我任何事情。您应该发布一个完整的测试用例,或者创建一个单元测试来演示问题并创建一个 Jira 问题。该错误表明您在该订阅上还有一个消费者,因此请确保您首先调用了 consumer.close()。
  • 有效!我们之前不知道需要 Clinet Id。谢谢。
猜你喜欢
  • 2018-05-11
  • 2017-03-24
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多