RabbitMQ随手笔记(十四)死信队列、延迟队列(.netCore2.0)

DLX,Deal-Letter-Exchange,死信交换器。当一个小小在队列中变成死信(DeadMessage)之后,他能被重新发送到DLX中,与DLX绑定到队列就是死信队列。

消息变成死信队列的情况:

1.消息被拒绝,并且设置ReQueue参数false;

2.消息过期;

3.队列打到最大长度;

生产者发送一条消息,经过交换器exchange_normal顺利存储到队列queue_normal中;由队列queue_normal设置为10s过期,在10s内没有消费者消费消息,那么判定消息过期;设置了DLX,过期消息被丢给交换器exchange_dlx,然后被存储在死信队列queue_dlx中。

                ConnectionFactory factory = new ConnectionFactory();
                factory.HostName = IP_ADDRESS;
                factory.Port = PORT;
                factory.UserName = USER_NAME;
                factory.Password = PASSWORD;
                con = factory.CreateConnection();
                channel = con.CreateModel();

                //DLX
                channel.ExchangeDeclare("exchange_dlx", "direct", true, false, null);
                //普通交换器
                channel.ExchangeDeclare("exchange_normal", "fanout", true, false, null);

                //参数设置
                Dictionary<string, object> args = new Dictionary<string, object>();
                args.Add("x-message-ttl", 10000);//TTL
                args.Add("x-dead-letter-exchange", "exchange_dlx");//DLX
                args.Add("x-dead-letter-routing-key", "routingkey");//routingKey

                //普通队列绑定
                channel.QueueDeclare("queue_normal", true, false, false, args);
                channel.QueueBind("queue_normal", "exchange_normal", null);

                //死信队列绑定
                channel.QueueDeclare("queue_dlx", true, false, false, args);
                channel.QueueBind("queue_dlx", "exchange_dlx", "routingkey", null);
    
                string message = "Hello Word!";
                var body = Encoding.UTF8.GetBytes(message);
                var properties = channel.CreateBasicProperties();
                properties.Persistent = true;

                channel.BasicPublish("exchange_normal","", properties, body);

 

延迟队列

上面对栗子就是一个延迟队列,消费者监听的并不是队列queue_normal,而是监听的queue_dlx,生产者发送消息之后,10s之后消费者从队列queue_dlx中获取队列并消费,队列queue_dlx也称为延迟队列

 

更多精彩请关注公众号:隔壁王小猿(gbwxy-happy)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值