美文网首页程序员RabbitMQ
RabbitMQ应用之延迟队列

RabbitMQ应用之延迟队列

作者: sssunday丶 | 来源:发表于2019-03-06 16:51 被阅读21次
    场景举例:订单生单成功后,30分钟未支付自动取消
    消息的ttl
    • 队列设置:
      • x-expires:队列ttl,当队列未使用(没有任何消费者、没有被重新声明、过期时间段内未调用过Basic.Get命令)时,会被删除。服务器重启后,持久化的队列过期时间会重新计算,x-expires单位为毫秒,不能设置为0
      • x-message-ttl :队列中消息的ttl
    • 发布消息设置:
      • expiration:单条消息ttl(若x-message-ttl也设置,取最短的ttl)
    • 消息抛出
      • 消息过期后,抛出需要满足两个条件,1个是消息过期,1个实在队列头部
      • 若消息已过期,并且不在头部,当消费者消费掉头部未过期的消息之后,过期的消息仍会被抛出,不会被消费者消费掉。
    死信交换器DLX:dead letter exchange
    • dlx和普通交换器并没有区别,可以绑定多个队列
    • 队列声明的时候,可以设置死信参数
      • x-dead-letter-exchange 指定队列的死信交换器
      • x-dead-letter-routing-key 指定dlx的路由键,可与延迟队列的路由键不同
    • 消息满足一定的条件会进入死信路由
      • 一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。
      • 消息过期
      • 队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信路由上。
    延迟队列的实现
    image
    • queue1作为延迟队列,用于存储消息等到过期后转到任务队列
    • queue2作为任务队列,已经经过延迟的消息,在这里被消费

    相关文章

      网友评论

        本文标题:RabbitMQ应用之延迟队列

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