RabbitMQ - “delivery-limit”和“x-delivery-limit”队列参数之间的差异

Nev*_*ach 4 rabbitmq

delivery-limit和 和有什么区别x-delivery-limit

当我设置x-delivery-limitas RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试,正如我所料,但在官方 RabbitMQ 文档中我看到了delivery-limit.

ans*_*nsd 9

两者都是有效的设置。

区别在于这delivery-limit是一个策略x-delivery-limit一个队列参数

同样的差异也适用于其他 RabbitMQ 设置,例如

  • dead-letter-exchange是策略 vsx-dead-letter-exchange是队列参数
  • queue-length是策略 vsx-queue-length是队列参数

队列参数以 为前缀x-,也称为x-argument。代表x“额外”或“扩展”,因为这些参数扩展了强制队列设置。强制队列设置例如durableexclusive属性。x-arguments是可选的队列设置。x-arguments由客户端在声明队列时设置。

也就是说,要更改x-argument,您需要重新部署客户端并重新声明队列。对于现有队列,x-argument不允许更改 an ,否则将导致inequivalent arg error关闭通道。

这就是政策派上用场的地方。它们具有以下优点:

  1. 策略是动态应用的。声明队列后,策略可以在运行时更改队列设置。请注意,并非所有队列设置都可以通过策略更改。例如,不允许更改x-queue-type(例如从classic队列到quorum队列),因为队列进程及其存储消息的方式一旦创建就不能动态更改。但是,大多数队列设置(包括delivery-limit)可以通过策略动态更改。
  2. 策略可以应用于队列(和交换机组)。队列参数只能应用于单个队列。

一般来说,最好尽可能使用策略而不是队列参数,因为策略更灵活。

更多官方文档:https://www.rabbitmq.com/parameters.html#why-policies-exist