我使用RabbitMQ
使用发布到队列立即通过相应的消费者消费RabbitMQ.The消息BasicConsume特点上个月successfully.Messages从队列中读取。 现在我创建了一个新的队列DelayedMsg,发布到这个队列的消息只有在延迟5分钟后才能被读取。我该怎么办?调度基本消耗RabbitMQ的
回答
当前时间戳值添加到所述消息而发布的消息以从出版商/发送方的主队列。说例如,“published_on” => 1476424186.
在消费者侧,首先检查当前的时间戳和published_on的时间差。
如果发现是少于5分钟的差,然后用设定到期时间发送邮件在另一队列(一个DLX队列)。(AMQP消息的使用“过期”属性)
该期满值应be(当前时间戳 - 已发布),它应该以毫秒为单位。
消息将在精确5分钟的DLX队列中过期。
确保'x-dead-letter-exchange'应该是您的主要队列交换并且与dlx队列有界,这样当消息到期时,它将自动排队回主队列。有关更多详细信息,请参阅Dead Letter Exchange。
因此,消费者现在得到的消息5分钟后回来,过程中它正常的,因为其当前的时间戳和published_on差将超过5分钟以上。
尝试避免使用DLX来实现延迟的消息了。它更像是在拥有“RabbitMQ延迟消息插件”之前的解决方法。
因为现在我们有了这个插件,我们应该尽量用它代替: https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/
这个插件显示了一些问题见:[link](https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/issues) –
创建2个队列。
1是工作队列
2是延迟队列
并设置延迟队列楼盘X-死信 - >工作队列名,TTL - > 5分钟
信息发送到延迟队列,不需要消费者吧,毕竟5分钟,该发送处理字母(工作队列)的消息,所以
- 1. RabbitMQ的消耗优先
- 2. RabbitMQ挂起队列消耗
- 3. RabbitMQ - 并行任务消耗
- 4. RabbitMQ - 消耗多个队列
- 5. 基于定义时间的JMS消息调度/消耗
- 6. Clojure + RabbitMQ /多线程消息消耗
- 7. 消耗在本地托管的rabbitmq消息
- 8. 在EC2上的RabbitMQ消耗CPU的CPU
- 9. 关闭不消耗的连接Rabbitmq
- 10. 消耗两个队列rabbitmq pika python
- 11. RabbitMQ的消耗消息是非阻塞与龙卷风
- 12. rabbitMq 3.6.5中的慢消息消耗。为什么?
- 13. 如何在Rabbitmq中设置消息的基本消息属性?
- 14. 基于多线程的RabbitMQ消费者
- 15. Jackson配置消耗rabbitmq中的记录列表
- 16. RabbitMQ - 基本新手问题
- 17. RabbitMQ铲基本示例
- 18. RabbitMQ非循环赛调度
- 19. 检查所消耗的消息最后还是没有在RabbitMQ的队列
- 20. Perl脚本消耗100%cpu
- 21. CometD使请求的过度消耗
- 22. 如何使用EasyNetQ同步消耗来自RabbitMQ的原始字节消息?
- 23. RabbitMQ msg_store_transient目录消耗所有可用磁盘空间
- 24. python中的文本或数据库,速度和资源消耗
- 25. 消耗的Android
- 26. 使用WCF消耗REST服务 - 基本身份验证
- 27. Rabbitmq消息与基于Java API的消息ID进行区分
- 28. RabbitMQ - 带元数据的基本拒绝
- 29. 调试内存消耗\已运行脚本的泄漏
- 30. ckeditor消耗所有可用高度?
@Bhimaro Gadge后,你只是消费者的工作队列和处理它在DLX的5分钟超时队列消息是否会再次重新排队到主从DLX队列中排队还是消耗? –
已过期的消息将被重新排入主队列,并从此处消费者接收/消费。 –
就我而言,这个要求很复杂。并非每个消息都必须延迟。有一些因素需要检查。所以我在消费者端放置了DLX requeue逻辑。如果你的要求真的很简单,那么我建议与其他选项直接发送消息到DLX队列设置5分钟过期消息或设置队列5分钟TTL(https://www.rabbitmq.com /ttl.html)。用主交换机绑定这个DLX队列。过期的消息然后在5分钟后在主队列中重新排队。然后消费者会消费它。 –