使用消息ttl实现调度消息RabbitMQ时消息被阻塞
我需要调度延迟消息,因此我声明了一个延迟队列delay_STAT,它带有x-dead-letter-exchange和x-dead-letter-routing-key,它将路由到默认的交换,并到达我的目标队列STAT 当我需要将延迟消息调度到queue STAT时,我将消息发布到delay_STAT with expiration,当到达消息ttl时,它将是一个死信,然后被路由到STAT以便可以使用它 但我遇到了一个问题,根据 设置每封邮件时,TTL过期邮件可以在后面排队 未过期的,直到后者被消费或过期使用消息ttl实现调度消息RabbitMQ时消息被阻塞,rabbitmq,schedule,Rabbitmq,Schedule,我需要调度延迟消息,因此我声明了一个延迟队列delay_STAT,它带有x-dead-letter-exchange和x-dead-letter-routing-key,它将路由到默认的交换,并到达我的目标队列STAT 当我需要将延迟消息调度到queue STAT时,我将消息发布到delay_STAT with expiration,当到达消息ttl时,它将是一个死信,然后被路由到STAT以便可以使用它 但我遇到了一个问题,根据 设置每封邮件时,TTL过期邮件可以在后面排队 未过期的,直到后者被
这意味着如果B提前发送,一些短延迟消息A将被长延迟消息B阻塞。如果您想安排消息发送,您可以发送到 执行以下操作
queue.dlx.0
、TTL介于60到119秒之间、名称为queue.dlx.0
的消息,等等
您知道,对于当前消息,TTL等于50秒。然后,您可以定义延迟队列名称queue.dlx
+Math.floor(50/60)
当消息TTL过期时,它将消失并进入队列,在那个里您有一个消费者来处理消息
此外,您可以为每条消息创建一个队列,并设置队列TTL(x-expires
),以在消息TTL过期后删除队列(消息TTL+几秒钟以防万一)
见下图:
(来源-[RUS])
另外,你可以看看这个插件
Math.floor-JS函数将小数舍入为最小整数