2016-11-21 55 views
0

我使用MassTransit編寫消費者並使用Azure服務總線作爲傳輸。如果消費者關機,會發生什麼?(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)); 
    } 
} 

如果異常發生,我將消息重新發送給另一位消費者。
但是如果總線發送消息,消費者開始處理它並且進程關閉,會發生什麼?我怎麼能不丟失信息?從google group

+0

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

+0

Consuming Faults part you mean? –

+0

失敗的消息放在錯誤隊列中 - _「使用缺省總線配置,異常被捕獲...並且消息被移動到_error隊列(由接收端點隊列名稱作爲前綴)。該消息用於分析並協助排除異常「_」。您也可以使用錯誤消息來獲取失敗通知,而不是通過檢查錯誤隊列。 – stuartd

回答

0

答:

消息被確認(ACK的)來運輸的消費者已經完成了它的工作之後。因此,對於任何未完成的消費者來說,它會是消費者中的應用程序停止還是異常情況,消息將保持在隊列中。雖然如果談到正確的終止,但這是不同的,因爲一旦你需要busHandle在終止應用程序之前運行Stop(),它將等待所有正在處理的消息,在允許總線停止之前通過管道運行。

相關問題