MassTransit-使用者抛出异常/发布者等待响应超时

本文关键字:等待 响应超时 发布者 使用者 抛出异常 MassTransit- | 更新日期: 2023-09-27 18:27:35

我正在使用MassTransit,我的应用程序中有以下ish代码:

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<>构造,但这将迫使我总是尝试/捕获每个consume方法——它们有很多。

有没有其他人更优雅地解决了这个问题?

MassTransit-使用者抛出异常/发布者等待响应超时

我相信您想要的是将c.HandleFault(fault => ...)添加到您的PublishRequest中。

如果这不起作用,在过去的一两周里,邮件列表上有几条消息,关于下一个版本中的一些修复方法。我认为失败仅限于传奇,但我可能错了。