有關請求/響應模式的MassTransit 3+中處理異常的最佳做法是什麼? docs here提到,如果消息中存在響應地址,則故障消息將被髮送到該地址,但是一個消費者如何接收該地址的消息? 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方法中,但是在重新嘗試放棄之前,每次異常都會調用它的缺點。處理請求/響應異常的正確方法是什麼?