在JUC中我们知道有延迟队列,在MQ中的延迟队列主要是用来存储延迟消息的,“延迟消息”就是指消息被发送以后,并不想让消费者立即拿到消息,而是等待特定的时间之后,消费者才能拿到这个消息。这和JUC中的延迟队列很相似。唯一的不同就是JUC中的DelayQueue是不断的判断时间然后去take其值。MQ则是通过逻辑来实现实现既入队列却对消费者不可见。
延迟队列的使用场景也很多,最明显就是微信公众号在指定时间发送公众号文章,还有使用订单超时的处理。
AMQP本身并没有直接支持延迟队列的功能,但是可以根据死信队列和消息超时来做延迟队列的功能。
基于上述简介,我们就可以做一个简单的根据路由键来决定消息延迟的筛选延迟队列的组合模式,这种适合延迟时间可选情况特别小的情况。
如果需要消息的延迟时间特别宽泛,那么我们就用具体消息的超时时间去解决,而不是消息队列整体消息的超时时间去解决,大概如下所示: