Как удалить / удалить подписчика ActiveMQ с помощью NMS API

Мне нужно удалить / удалить мою тему подписчика. Я нашел этот 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. удалить получателя на стороне сервера (как пример кода в последнем обновлении)

Вот снимок брокера activemq через jconsole: снимок jconsole

Мы хотели бы удалить подписчика "7B0FD84D-6A2A-4921-967F-92B215E22751" следующим способом, но всегда получал эту ошибку "javax.jms.InvalidDestinationException: не существует длительной подписки для: 7B0FD84D-6A2A-4921-967F-92B215E

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

1 ответ

Решение

Чтобы удалить гарантированную подписку из NMS API, используйте DeleteDurableConsumer метод, определенный в ISession. Вы должны вызывать этот метод из Соединения, которое использует тот же идентификатор клиента, который использовался при создании подписки, и вы передаете имя подписки, которая должна быть удалена. Метод не удастся, если есть активный подписчик, хотя так что будьте готовы к этому исключению.

В примере кода вы не устанавливаете Client Id для соединения. При работе с долговременными подписками вы ДОЛЖНЫ, ДОЛЖНЫ, ДОЛЖНЫ всегда использовать один и тот же идентификатор клиента и имя подписки. Таким образом, у вас так же вы будете получать эту ошибку, пока не установите для идентификатора клиента то же значение, что и для соединения, которое изначально создало подписку.

Другие вопросы по тегам