zoukankan      html  css  js  c++  java
  • rabbitmq延迟消息


    一、RabbitMQ的两个概念

    使用RabbitMQ来实现延迟消息必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。 

    1、消息的TTLTime To Live

    消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。
    我们创建一个队列queue.temp,在Arguments 中添加x-message-ttl 5000 (单位是毫秒),那每一个进入这个队列的消息在5秒后会消失。

    2.死信交换器 Dead Letter Exchanges

    一个消息在满足如下条件下,会进死信交换机,记住这里是交换机而不是队列,一个交换机可以对应很多队列。
    1) 一个消息被Consumer拒收了,并且reject方法的参数里requeuefalse。也就是说不会被再次放在队列里,被其他消费者使用。
    2上面的消息的TTL到了,消息过期了
    3)队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信交换机上。
    Dead Letter Exchange其实就是一种普通的exchange,和创建其他exchange没有两样。只是在某一个设置Dead Letter Exchange的队列中有消息过期了,会自动触发消息的转发,发送到Dead LetterExchange中去。 

    二、示例

     我们现在可以测试一下延迟队列。
    1)创建死信交换器 exchange.ordertimeout fanout
    2)创建队列queue.ordertimeout
    3)建立死信交换器 exchange.ordertimeout 与队列queue.ordertimeout 之间的绑定
    4)创建队列queue.ordercreateArguments添加

    x-message-ttl=10000
    x-dead-letter-exchange: exchange.ordertimeout

    5)测试:向queue.ordercreate队列添加消息,等待10秒后消息从queue.ordercreate队列消失,

    步骤:

    1)创建死信交换器 exchange.ordertimeout fanout

    2)创建队列queue.ordertimeout

    3)建立死信交换器 exchange.ordertimeout 与队列queue.ordertimeout 之间的绑定

    4)创建队列queue.ordercreateArguments添加

    x-message-ttl=10000
    x-dead-letter-exchange: exchange.ordertimeout

    5)测试:向queue.ordercreate队列添加消息,等待10秒后消息从queue.ordercreate队列消失,

  • 相关阅读:
    简直不敢相信...
    halcon 保存Region [原创]
    VS2015 下载链接
    C#【数据转换】十进制yte[]相互转换
    C# 复制窗体问题完美解决办法
    TextBox 保持固定长度,添加新行滚动到最后,跨线程。
    mysql isnull
    C#跨线程访问控件[我的记录]
    C# 常用类-IO-ClassExcelExport
    C# 常用类-IO-ClassXML
  • 原文地址:https://www.cnblogs.com/aaaazzzz/p/12901590.html
Copyright © 2011-2022 走看看