Как удалить / удалить подписчика 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
}
Обновить
Наш сценарий довольно прост.
- Клиент создал очередь и подписал потребителя на тему.
- клиентская сторона закрыла соединение.
- удалить получателя на стороне сервера (как пример кода в последнем обновлении)
Вот снимок брокера 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 для соединения. При работе с долговременными подписками вы ДОЛЖНЫ, ДОЛЖНЫ, ДОЛЖНЫ всегда использовать один и тот же идентификатор клиента и имя подписки. Таким образом, у вас так же вы будете получать эту ошибку, пока не установите для идентификатора клиента то же значение, что и для соединения, которое изначально создало подписку.