RabbitMQ实现定时/延长使命

打印 上一主题 下一主题

主题 924|帖子 924|积分 2772

方案选择实现方式(两种)

  • 基于死信队列实现
  • 基于插件实现
实现缺陷:不肯定准时投送,当某一个时间堆积大量消息,那包会有延长的
基于死信队列有如许一个场景,当我是基于消息设置逾期时间,第一个投送到空队列的逾期时间设置为1h,第二个设置为2m,由于是次序队列,会导致第二个消息被阻塞,所以基于死信队列还是得当固定时间的延长
那建议还是用插件实现,插件可以实现自定义消息逾期时间,使用了一种类似于优先队列的数据布局(详细不相识),虽然依然是监控队首,但是内部消息是根据逾期时间长短来决定队首消息的

实现原理

RabbitMQ 插件

rabbitmq_delayed_message_exchange 插件为每个消息维护独立的延长计时器。当消息发送到使用该插件的互换器时,插件根据消息 headers 中设置的 x - delay 值启动计时使命,延长时间到达后将消息路由到目的队列。它类似于使用一个优先队列来管理消息,按照延长时间对消息排序,延长时间短的消息优先处理。
对比RocketMQ

RocketMQ 接纳延长队列和定时使命调治实现定时消息。生产者发送的定时消息先被存储到特殊的延长队列,这些延长队列按预设的延长级别划分,每个级别对应固定延长时间。RocketMQ 的定时使命周期性检查延长队列,当消息延长时间到达,将其从延长队列取出并发送到目的主题的正常队列。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表