美文网首页
RabbitMQ实现延时队列

RabbitMQ实现延时队列

作者: 丶Lukez | 来源:发表于2019-09-26 10:35 被阅读0次

    首先,我们需要知道,Rabbit本身是不支持延时队列的。但是,它有一个死信投递机制,可以曲线救国来实现我们想要的延时效果

    所谓死信,是指某个队列中的消息未被正常消费,既被标记为死信。未正常消费情况可能如下:

    重点是,Rabbit可以为队列指定 死信交换机死信RouteKey 参数,那么当该队列产生死信后,Rabbit便会自动将死信投递到所指定的交换机,通过RouteKey再到其它队列

    利用该机制,设想:

    1. 建立A-E交换机和A-Q队列,并相互绑定
    2. 建立B-E交换机和B-Q队列,并相互绑定,RouteKey为B-Key
    3. 设置A-Q的消息超时时间为X毫秒(想要延时多少就设置多少),死信交换机为B-E,死信RouteKey为B-Key
    4. 开启消费者,指定消费队列为B-Q
    5. 生产者通过A-E发送消息到A-Q,因为A-Q没有任何消费者,X毫秒后,消息将变为死信,由MQ自动投递到B-E。B-E通过B-Key发送信息到B-Q,此时消费者收到信息,开启消费逻辑

    通过以上过程,我们便可实现延时队列的效果啦~

    以上步骤,3是本文的重点,此处对应的三个参数key分别为:

    x-message-ttl :消息超时时间,单位为毫秒
    x-dead-letter-exchange : 死信交换机
    x-dead-letter-routing-key:死信RouteKey

    web端操作截图如下(十分钟超时):

    Rabbit死信.png

    至此,一个延时队列就实现了,经实践,运行稳定~

    相关文章

      网友评论

          本文标题:RabbitMQ实现延时队列

          本文链接:https://www.haomeiwen.com/subject/zkypuctx.html