【问题标题】:How to add x-max-length and x-overflow to MassTransit queue while configuring connection?配置连接时如何将 x-max-length 和 x-overflow 添加到 MassTransit 队列?
【发布时间】:2022-01-22 03:18:39
【问题描述】:

我有一个消费者,他需要从现有的 RabbitMQ 队列中消费消息。当队列配置正常,无需任何设置,它就可以正常工作。

services.AddMassTransit(config =>
{
    config.AddConsumer<OrderConsumer>();
    config.UsingRabbitMq((ctx, cfg) =>
    {
        cfg.Host("amqp://user:12345@localhost:54425");
        cfg.ReceiveEndpoint("transient-order-queue", c =>
        {
            c.ConfigureConsumer<OrderConsumer>(ctx);
        });
    });
});
services.AddMassTransitHostedService();

为了完成一些工作,我需要为队列配置一些功能。

Features    
x-max-length:   1000
x-overflow: reject-publish
arguments:  
x-queue-type:   classic
durable:    true

如何配置我的消费者以连接到该队列?它给了我这样的错误:

PRECONDITION_FAILED - vhost '/' 中队列 'transient-order-queue' 的不等价参数 'x-max-length':没有收到,但当前是 'long' 类型的值 '1000'

但我不明白,如何将这些参数添加到 MassTransit 配置中。请帮帮我!

【问题讨论】:

    标签: .net rabbitmq masstransit


    【解决方案1】:

    只需将它们添加为队列属性:

    cfg.ReceiveEndpoint("transient-order-queue", c =>
            {
                c.QueueAttributes["x-max-length"] = 1000;
                c.QueueAttributes["x-overflow"] = "reject-publish";
                c.ConfigureConsumer<OrderConsumer>(ctx);
            });
    

    【讨论】:

      【解决方案2】:

      找到了答案。您可以使用以下语法将属性添加到队列中:

      cfg.ReceiveEndpoint("transient-order-queue", c =>
      {
          c.ConfigureConsumer<OrderConsumer>(ctx);
          c.SetQueueArgument("x-overflow", "reject-publish");
          c.SetQueueArgument("x-max-length", 1000);
      });
      

      【讨论】:

        猜你喜欢
        • 2011-12-04
        • 2014-04-25
        • 1970-01-01
        • 2020-01-18
        • 2022-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        相关资源
        最近更新 更多