MQ死信和延时消息
MQ死信和延时消息
一、介绍:什么是死信队列?
- 消息被拒(basic.reject or basic.nack)并且没有重新入队(requeue=false);
- 当前队列中的消息数量已经超过最大长度。
- 消息在队列中过期,即当前消息在队列中的存活时间已经超过了预先设置的TTL(Time To Live)时间;
二、配置
- 配置业务队列,绑定到业务交换机上
- 为业务队列配置死信交换机和路由key
- 为死信交换机配置死信队列
生产端:
public static void SendMessage() { var exchangeA = "exchange"; var routeA = "routekey"; var queueA = "queue"; var exchangeD = "dlx.exchange"; var routeD = "dlx.route"; var queueD = "dlx.queue"; using (var connection = RabbitMQHelper.GetConnection()) { using(var channel = connection.CreateModel()) { // 创建死信交换机 channel.ExchangeDeclare(exchangeD, type: "fanout", durable: true, autoDelete: false); // 创建死信队列 channel.QueueDeclare(queueD, durable: true, exclusive: false, autoDelete: false); // 绑定死信交换机和队列 channel.QueueBind(queueD, exchangeD, routeD); channel.ExchangeDeclare(exchangeA, type: "fanout", durable: true, autoDelete: false); channel.QueueDeclare(queueA, durable: true, exclusive: false, autoDelete: false, arguments: new Dictionary<string, object> { { "x-dead-letter-exchange",exchangeD}, //设置当前队列的DLX { "x-dead-letter-routing-key",routeD}, //设置DLX的路由key,DLX会根据该值去找到死信消息存放的队列 { "x-message-ttl",10000} //设置消息的存活时间,即过期时间 }); channel.QueueBind(queueA, exchangeA, routeA); var properties = channel.CreateBasicProperties(); properties.Persistent = true; //发布消息 channel.BasicPublish(exchange: exchangeA, routingKey: routeA, basicProperties: properties, body: Encoding.UTF8.GetBytes("hello rabbitmq message")); } } }
谢谢学习!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构