RabbitMQ -比较'delivery-limit'和'x-delivery-limit'队列参数之间的差异

zaqlnxep  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(520)

delivery-limitx-delivery-limit之间有什么区别?
当我将x-delivery-limit设置为RabbitMQ队列参数时,我可以看到它限制了我的消息重新排队尝试,正如我所预料的那样,但在正式的RabbitMQ文档中,我看到了delivery-limit的用法。

r3i60tvu

r3i60tvu1#

两者都是有效设置。
区别在于delivery-limit是一个策略,而x-delivery-limit是一个队列参数
同样的区别也适用于其他RabbitMQ设置,例如

  • dead-letter-exchange是策略,而x-dead-letter-exchange是队列参数
  • queue-length是策略,而x-queue-length是队列参数

队列参数以x-为前缀,也称为x-argumentx代表“extra”或“extended”,因为这些参数扩展了必需的队列设置。例如,必需的队列设置是durableexclusive属性。x-arguments是可选的队列设置。x-arguments由客户端在声明队列时设置。
也就是说,若要变更x-argument,您需要重新部署从属端,并重新宣告队列。对于现有的队列,不允许变更x-argument,而且会导致inequivalent arg error关闭通道。
这就是策略派上用场的地方。它们具有以下优点:
1.策略是动态应用的。一旦声明了队列,策略可以在运行时更改队列设置。请注意,不是所有的队列设置都可以由策略更改。例如,更改x-queue-type(例如,从classic队列到quorum队列)因为队列进程及其存储消息的方式在创建后就不能动态更改。但是,大多数队列设置(包括delivery-limit)都可以通过策略动态更改。
1.策略可以应用于队列(和交换组)。队列参数只能应用于单个队列。
通常,在可能的情况下,使用策略而不是队列参数是一种好的做法,因为策略更灵活。
更多信息请参见官方文档:https://www.rabbitmq.com/parameters.html#why-policies-exist

qlzsbp2j

qlzsbp2j2#

我相信delivery-limit只是x-delivery-limit头值名称您可以在RabbitMQ UI中找到队列参数
RabbitMQ提供了一个blog post的屏幕截图(图9.仲裁队列参数),其中使用了仅适用于仲裁队列的x-delivery-limit标头(功能矩阵)
UPD:与this screenshot一致,x-delivery-limit是队列功能的一部分,但是delivery-limit是应用于此队列的策略定义的一部分。有关详细资料,请查看this article

相关问题