下面我们研究MQ的延迟性问题
(1)初始死信交换机
死信交换机作用一方面可以向Public的异常交换机一样做异常消息的兜底方案,另一方面,可以处理一些超时消息,功能比较丰富一点
(2)TTL
上面学习死信有三种情况,第一是消息处理的时候失败了,最终被拒绝了,不想入队,就变成了死信了,死信交换机可以做一种兜底的方案,第二种消息超时没有被消费,结果过期了,变成了死信,这个呢跟延迟消息有关系,下面我们来学习超时机制TTL
在消费者里添加代码:
发送者:
消费者日志:
他们是时间差正好10s
上面是给队列设置的延迟时间,也可以给消息设置延迟时间。
延迟5s,以较准的为准
(3)延迟队列
上面通过TTL和死信交换机实现了延迟消息的效果,实现起来比较麻烦,需要经过好几个交换机和队列,配置比较复杂。下面我们会使用一种延迟队列的插件,来实现延迟消息
这个插件属于MQ中的拓展功能,需要找到MQ的插件目录,才能安装
在消费者中:
消息发送者:
这里报错了,因为我们编写了ReturnCllback,失败会被认为是延迟消息,会被重发,是不合理的,它本身没有失败,只是被延迟了这种类型的消息,不用重发,我们需要加个判断
添加代码判断:
加了代码之后就只有成功的消息没有失败的