2016-11-21 4 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)); 
    } 
} 

例外が発生した場合、別のコンシューマにメッセージを再配信します。
しかし、バスがメッセージを送信すると、コンシューマーはメッセージを処理し始め、プロセスはシャットダウンされます。どうすればメッセージを失うことができますか? google groupから

+0

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

+0

Consuming Faultsの意味は? –

+0

失敗したメッセージはエラーキューに格納されます - _ "デフォルトのバス構成では、例外がキャッチされ、メッセージは_errorキュー(受信エンドポイントキュー名の先頭)に移動されます。分析のためのメッセージ、例外のトラブルシューティングを支援する "_。また、エラー・キューをチェックするのではなく、障害メッセージを使用して障害の通知を受け取ることもできます。 – stuartd

答えて

0

回答:

メッセージは、消費者がその作業を完了した後にのみ輸送に(ACKさ)が確認されています。したがって未完成のコンシューマの場合は、コンシューマ内のアプリケーションの停止または例外になりますが、メッセージはキューに残ります。アプリケーションを終了する前にBusHandleでStop()を実行する必要があると、現在処理中のすべてのメッセージがパイプラインで実行されてからバスが停止するのを待つため、適切な終了については別です。

関連する問題