Я интегрирую систему ActiveMQ JMS с использованием библиотеки Apache.NMS. Для прослушивателя очереди ответов неясно, находится ли потребитель после получения сообщения.ActiveMQ - Нужно ли переписываться в очередь после запуска события Listener?
Вот выдержки из решения:
var destination = getDestination(session, Settings.Instance.OutboundQueue);
// Create a consumer and producer
using (var consumer = session.CreateConsumer(destination))
{
// Start the connection so that messages will be processed.
connection.Start();
consumer.Listener += OnMessage;
var receiveTimeout = TimeSpan.FromSeconds(Settings.Instance.Timeout);
// Wait for the message
semaphore.WaitOne((int)receiveTimeout.TotalMilliseconds, true);
}
// The Listener event
protected void OnMessage(IMessage receivedMsg)
{
var message = receivedMsg as ITextMessage;
semaphore.Set();
// process the message
}
Является ли потребитель долговечны?
У вас есть необходимость отменить подписку после получения сообщения?
Это похоже на другие реализации очередей/слушателей (брокер SQL Server или прослушиватель TCP/IP), где вам нужен цикл while (true), чтобы поддерживать активный слушатель?
Спасибо. Я изменил его, чтобы удерживать соединение/сеанс и потребитель в качестве полей моего класса приемника, который реализует IDisposable. Я очищаю эти поля во время удаления. Означает ли это, что событие Listener будет срабатывать для каждого сообщения без цикла while? – reckface
Если вы правильно его кодируете, это должно означать использование шаблона асинхронного прослушивания. Лучший способ узнать, спросить компьютер. –