2015-12-21 2 views
0

Я интегрирую систему 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), чтобы поддерживать активный слушатель?

ответ

1

Из-за того, как вы закодировали это, я считаю, что (мой .NET ржавый) вам нужно создать новый прослушиватель для каждого сообщения, поскольку используемый блок будет распоряжаться потребителем.

Если вы закодировали такие вещи, чтобы потребитель был переменной-членом, где он был сохранен и закрыт только тогда, когда вы хотели прекратить прослушивание, у вас не было бы этой проблемы. Блок использования по своей природе будет распоряжаться ресурсами, которые вы просите об этом.

+0

Спасибо. Я изменил его, чтобы удерживать соединение/сеанс и потребитель в качестве полей моего класса приемника, который реализует IDisposable. Я очищаю эти поля во время удаления. Означает ли это, что событие Listener будет срабатывать для каждого сообщения без цикла while? – reckface

+0

Если вы правильно его кодируете, это должно означать использование шаблона асинхронного прослушивания. Лучший способ узнать, спросить компьютер. –

Смежные вопросы