背景
我之前在做延迟消息的时候做了很多的尝试,也摒弃了很多的方案,其中就有RabbitMQ死信队列和延迟插件的使用,其实他们都有比较严重的局限性,但是这两天我在看博客时候发现呢,很多文章或者公众号大肆宣扬它的功能点...我现在描述下自己调查基于RabbitMQ两种方式实现延迟消息的局限性
2.1死信队列局限性
我们基于TTL和死信队列(概念性的解释和demo可以看我之前的博客)做到延迟消息的局限性在于,延迟粒度是在队列级别的...,我们需要对队列设置固定的TTL,然后每个消息在进入队列时候拥有统一的初始化消息消亡时间,如果我们想要做到延迟时间随机必须要做到创建很多很多很多不同TTL的延迟队列.
2.2基于RabbitMQ延迟插件的局限性...,所以会占用大量的CPU用于运算
由于其内部是没有存储消息的进入时间,只有一个TTL,其在重启的时候很容易造成延迟时间的重置
延迟插件作者并没有实现比较完善的延迟消息存储和扫描,因此我们不建议实现大量消息的存储...第一 监听延迟交换机的延迟消息量,是其尽量维持在一个可控的量级(比如10W)
第二 持久化延迟时间比较久的消息,然后只延迟最近几小时的消息,然后去扫持久化延迟消息表,但是这点比较坑,因为有些消息可能比较集中的某个时刻发