有关请求/响应模式的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方法中,但是在重新尝试放弃之前,每次异常都会调用它的缺点。处理请求/响应异常的正确方法是什么?