方案选择实现方式(两种)
实现缺陷:不肯定准时投送,当某一个时间堆积大量消息,那包会有延长的
基于死信队列有如许一个场景,当我是基于消息设置逾期时间,第一个投送到空队列的逾期时间设置为1h,第二个设置为2m,由于是次序队列,会导致第二个消息被阻塞,所以基于死信队列还是得当固定时间的延长
那建议还是用插件实现,插件可以实现自定义消息逾期时间,使用了一种类似于优先队列的数据布局(详细不相识),虽然依然是监控队首,但是内部消息是根据逾期时间长短来决定队首消息的
实现原理
RabbitMQ 插件
rabbitmq_delayed_message_exchange 插件为每个消息维护独立的延长计时器。当消息发送到使用该插件的互换器时,插件根据消息 headers 中设置的 x - delay 值启动计时使命,延长时间到达后将消息路由到目的队列。它类似于使用一个优先队列来管理消息,按照延长时间对消息排序,延长时间短的消息优先处理。
对比RocketMQ
RocketMQ 接纳延长队列和定时使命调治实现定时消息。生产者发送的定时消息先被存储到特殊的延长队列,这些延长队列按预设的延长级别划分,每个级别对应固定延长时间。RocketMQ 的定时使命周期性检查延长队列,当消息延长时间到达,将其从延长队列取出并发送到目的主题的正常队列。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |