要求/応答パターンに関してMassTransit 3+の例外を処理するためのベストプラクティスは何ですか? docs hereでは、メッセージにResponseAddressが存在する場合、そのアドレスにFaultメッセージが送信されますが、そのアドレスでメッセージを受信するコンシューマはどのようになりますか? Bus.RequestのResponseAddressは自動生成されたMassTransitのアドレスのように見えますが、私は主なコンシューマにスローされた例外にアクセスする方法を知らないのです。私は何が欠けていますか?ここではユニティ・コンテナを使用して、消費者とその障害、消費者を登録するための私のコードだ:MassTransit障害コンシューマが要求/応答に対して呼び出されない
cfg.ReceiveEndpoint(host, "request_response_queue", e =>
{
e.Consumer<IConsumer<IRequestResponse>>(container);
e.Consumer(() => container.Resolve<IMessageFaultConsumer<IRequestResponse>>() as IConsumer<Fault<IRequestResponse>>);
});
そしてここでは、グローバル・メッセージフォルト消費者の私の試みです:私はBus.Publishを使用する場合
public interface IMessageFaultConsumer<TMessage>
{
}
public class MessageFaultConsumer<TMessage> : IConsumer<Fault<TMessage>>, IMessageFaultConsumer<TMessage>
{
public Task Consume(ConsumeContext<Fault<TMessage>> context)
{
Console.WriteLine("MessageFaultConsumer");
return Task.FromResult(0);
}
}
このアプローチでは、作業を行いますBus.Requestとは対照的です。私はまた、IConsumeObserverを作成し、グローバル例外ログコードをConsumeFaultメソッドに入れてみましたが、再試行の前にすべての例外が呼び出されるという欠点があります。要求/応答の例外を処理する適切な方法は何ですか?