【问题标题】:Requests failing with a timeout, why?请求因超时而失败,为什么?
【发布时间】:2021-08-12 20:36:41
【问题描述】:

我已将 MassTransit 与 RabbitMQ 配置为传输。我只是使用通用 IRequestClient 的一个实例向消费者发送请求,然后该消费者应该返回响应。

我的问题是所有其他请求都因 TimeoutException 而失败。执行一次,下一次失败,然后再次运行。

失败时甚至不会调用消费者。

这可能是什么原因?

我有其他服务在它们的请求和消费者中使用相似的名称。我试图弄清楚这是否是问题所在。

【问题讨论】:

    标签: rabbitmq masstransit


    【解决方案1】:

    您应该使用请求客户端和配置消费者的客户端发布应用程序的配置代码。

    如果您有其他同名的消费者,如果您使用ConfigureEndpoints,他们很可能在同一个队列中,这可能是问题的根本原因。

    由于超时是每隔一个消息,这是有道理的,因为 RabbitMQ 将在具有相同队列名称的不同服务之间对队列进行负载平衡。

    【讨论】:

    • 好的。不同服务中的消费者使用相同的名称。他们共享相同的队列。我可以验证。现在,我必须弄清楚如何通过名称来区分它们。 services.AddMassTransit(x => { x.SetKebabCaseEndpointNameFormatter(); x.AddConsumers(typeof(Program).Assembly); x.UsingRabbitMq((context, cfg) => { cfg.ConfigureEndpoints(context); }); }) ; services.AddMassTransitHostedService();
    • 端点名称格式化程序构造函数中有选项可以添加命名空间,如果有帮助的话。
    • 好的。也许,在这种情况下,我应该尝试给我的请求和通知赋予唯一的名称,以说明它们是关于什么的——这样我就不会有冲突了。我会先试试这个。谢谢!
    • 您绝对应该为不相关的消费者使用相同的消息类型。并且始终推荐使用不同的消费者和传奇名称。
    • 是的,现在说得通了。我在问这个问题之前的理论被证明是正确的。我已经解决了这个问题,所以它现在又可以在实践中使用了。这一切都是因为我复制了项目而开始的,而且你知道……命名。现在我分别有 AddOrderItem* 和 AddCartItem*。我的测试项目。
    猜你喜欢
    • 2018-07-25
    • 2021-12-31
    • 1970-01-01
    • 2020-03-28
    • 2012-04-06
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多