配置连接时如何将 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 队列?的主要内容,如果未能解决你的问题,请参考以下文章