c# - MassTransit - 消费者抛出异常/发布者等待响应超时

标签 c# masstransit

我正在使用 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/

相关文章:

c# - WPF:将转换器应用于 ItemsSource

c# 获取括号后的第一个 ';'

Masstransit Jobconsumer 更改队列名称 Job、JobAttempt 和 JobType

c# - 如何在 C# 中使用 Automatonymous 实现状态机

c# - .NET CORE 3 Windows 服务的基本路径返回 C :\Windows\System32, 但实际文件夹是 D:\MyCustomService

c# - 登录弹出窗口和 Selenium

c# - 公共(public)交通消息的最大大小是多少?

masstransit - 如何将标题附加到所有已发布的消息?

masstransit - 有没有办法在设置使用者时定义 Azure 服务总线规则/过滤器?

C# EdiFabric 导出 EDI 835 文件