配置连接时如何将 x-max-length 和 x-overflow 添加到 MassTransit 队列?

Posted

技术标签:

【中文标题】配置连接时如何将 x-max-length 和 x-overflow 添加到 MassTransit 队列?【英文标题】:How to add x-max-length and x-overflow to MassTransit queue while configuring connection? 【发布时间】: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 配置中。请帮帮我!

【问题讨论】:

【参考方案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);
);

【讨论】:

以上是关于配置连接时如何将 x-max-length 和 x-overflow 添加到 MassTransit 队列?的主要内容,如果未能解决你的问题,请参考以下文章

队列最大长度或TTL使用get但不消耗

EMQ X 服务器 SSL/TLS 安全连接配置指南

springboot操作rabbitmq

如何将TCP连接重新连接到同一端口?

如何导出 DBeaver 连接配置?

如何配置Mac OS X 与 Windows之间共享网络