2016-11-21 3 views
0

Я написал потребителя, используя MassTransit, и использовал Azure Service Bus в качестве транспорта.Что происходит, если закрытие потребителя? (MassTransit)

public async Task Consume(ConsumeContext<ISimpleRequest> context) 
{ 
    try 
    { 
     _log.InfoFormat("Strated working on {0}", context.Message.CustomerId); 
     Thread.Sleep(500); 
     _log.InfoFormat("Returning name for {0}", context.Message.CustomerId); 
    } 
    catch(Exception ex) 
    { 
     await context.Redeliver(TimeSpan.FromSeconds(1)); 
    } 
} 

Я повторно отправляю сообщение другому потребителю, если исключение случается.
Но что произойдет, если автобус отправит сообщение, потребитель начнет работать над ним, и процесс будет закрыт? Как я могу не потерять сообщение?

+0

http://docs.masstransit-project.com/ru/latest/usage/exceptions.html – stuartd

+0

Потребление недостатков, которые вы имеете в виду? –

+0

Ошибочные сообщения помещаются в очередь ошибок - _ "При конфигурации шины по умолчанию исключение попадает ... и сообщение перемещается в очередь _error (с префиксом имени очереди конечной точки приема). Сведения об исключении хранятся в виде заголовков с сообщение, для анализа и помочь в устранении неполадок исключения "_. Вы также можете использовать сообщение об ошибке, чтобы получать уведомление об ошибке, а не проверять очереди ошибок. – stuartd

ответ

0

Ответ от google group:

сообщения подтверждаются (ACKed) к перевозке только после того, как потребитель завершил свою работу. Таким образом, для любого незавершенного потребителя, будь то остановка или исключение приложения в потребителе, сообщение останется в очереди. Это другое, хотя если говорить о правильных окончаниях, поскольку, как только вам нужно, чтобы busHandle запускал Stop() перед завершением работы приложения, он будет ждать все обрабатываемые в настоящее время сообщения, чтобы пропустить по конвейеру, прежде чем разрешить остановку шины.