死信队列

作者: HmilyMing | 来源:发表于2018-08-15 07:18 被阅读398次

    死信队列:DLX,dead-letter-exchange

    利用dlx,当消息在一个队列中变成死信(dead message)之后,它能被重新publish到另一个exchange,这个exchange就是dlx

    消息变成死信的原因有:

    1.消息被拒绝(basic.reject / basic.nack)并且reQueue=false

    2.消息TTL过期

    3.队列达到最大长度了

    dlx也是一个正常的exchange,和一般的exchange没什么区别,它能在任何队列上被指定,实际上就是设置一个属性。

    当这个队列中有死信时,rabbitMQ就会自动的将这个消息重新发布到设置的exchange上去,进而被路由到另一个队列。

    可以监听这个队列中消息做相应的处理,这个特性可以弥补rabbitMQ3.0以前支持的immediate参数功能。

    死信队列的设置:

    首先要设置死信队列的exchange和queue,然后进行绑定:

      exchange: dlx.exchange

      queue: dlx.queue

      routingkey:  #

    然后进行正常声明交换机、队列、绑定,只不过需要在队列加上一个参数即可: argument.put("x-dead-letter-exchange", "dlx.exchange");

    这样消息在过期、reQueue、队列在达到最大长度时,消息就可以直接路由到死信队列

    代码实现:代码地址:    https://github.com/hmilyos/rabbitmq-api-demo

    生产端

    先把消费端启动,去管控台查看test_dlx_exchange以及test_dlx_queue这两个普通的交换机、队列, 死信队列dlx.queue以及绑定的dlx.exchange是否创建成功

    确认创建成功就关闭消费端,然后再启动生产端,这时候消息没被消费,一直在test_dlx_queue中,

    消息还在普通队列中

    直到设置的超时时间后,消息就被转发到死信队列中

    消息已被转发到死信队列中

    自此,死信队列的简单用法介绍完毕。

    相关文章

      网友评论

        本文标题:死信队列

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