我正在使用 MassTransit,并且我的应用程序中有以下代码:
RequestMsg request = buildMeARequest();
SomeTypeOfResponse response = null;
_serviceBus.PublishRequest(request, c =>
{
c.Handle<SomeTypeOfResponse>(message => response = message);
c.SetTimeout(TimeSpan.FromSeconds(30));
});
return response;
在消费者方面,我有这样的东西:
public class RequestMsgConsumer : Consumes<T>.All
{
public RequestMsgConsumer(IServiceBus serviceBus)
{
_serviceBus = serviceBus;
}
public void Consume(RequestMsg request)
{
SomeTypeOfResponse response = doWorkToGetResponse(request);
_serviceBus.Context().Publish(response);
}
}
当一切顺利时,这非常有效......但是如果 doWorkToGetResponse(request)
抛出异常(或者 Consume()
方法的任何部分),原始请求者超时,没有失败的迹象。
我最初的想法是建立一个像Either<Exception, SomeTypeOfResponse>
这样的类这样请求者总是期望这个 Either<>
构造,但这将迫使我总是尝试/捕获每个消费方法 - 而且有很多方法。
还有其他人更优雅地解决这个问题吗?
最佳答案
我相信您想要的是将 c.HandleFault(fault => ...)
添加到您的 PublishRequest
中。
如果这不起作用,过去一两周的邮件列表上有几条消息,说明下一个版本中将如何进行一些修复。我认为失败仅限于传奇,但我可能是错的。
关于c# - MassTransit - 消费者抛出异常/发布者等待响应超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18196622/