我需要安排延迟消息,所以我声明了一个带有x死信交换和x死信路由密钥的延迟队列DELAY_STAT,它将路由到默认的交换到我的目标队列统计数据。
当我需要为队列STAT安排延迟消息时,我会在到期时将消息发布到DELAY_STAT,当到达消息ttl时,它将是一个死信,然后路由到STAT,以便可以使用它。
但是我遇到了一个问题,据https://www.rabbitmq.com/ttl.html#per-message-ttl-caveats说
当设置每条消息时,TTL过期消息可以排在未过期消息的后面,直到后者被使用或过期为止。
这意味着如果B更早地发送,一些短延迟消息A将被长延迟消息B所堆积。
发布于 2018-06-22 07:26:00
如果您想安排发送邮件,您可以执行以下操作。
例如。
让我们假设您的时间窗口是60秒,所以您将有一个单独的队列来处理具有TTL的消息,在0到59秒之间(包括名字),例如queue.dlx.0,一个单独的队列用于60到119秒的消息队列,名称为queue.dlx.0,等等。
您知道,对于当前消息,TTL等于50秒。然后,您可以定义延迟队列名queue.dlx + Math.floor(50 / 60)
当message过期时,它会死掉,然后进入队列,在那里有一个使用者来处理这些消息。
此外,您还可以为每条消息创建一个队列,并设置队列TTL (x-expires),以便在过期消息TTL (message +以防万一)之后删除队列。
见图:images/1a2/95d/14f/1a295d14fbeea180e17636a86e8fbce6.png
(来源:https://habr.com/post/235983/ RUS)
另外,您也可以看看这个插件https://github.com/rabbitmq/rabbitmq-delayed-message-exchange。
Math.floor - JS函数将小数圈到最小整数.
https://stackoverflow.com/questions/50982035
复制相似问题