最新要闻
- 复旦微电间接股东章勇被批评 正拟发不超20亿可转债|环球观点
- Uzi请假原因找到了!担任亚运会《英雄联盟》国家队教练:指导下路
- 5G专利全球第一 华为向日本公司收专利费:日企有三大麻烦了
- 通讯!笔记本电脑坐上过山车 下半年或复苏
- 全球通讯!任天堂打造!《超级马力欧兄弟大电影》7月14日上线网播:B站、腾讯已预告
- 多女子开直播看望杭州跳河救人外卖小哥 本人回应:别利用我带货
- 安徽省利辛县发布大风蓝色预警 环球关注
- 焦点信息:2023成都迎大运蓉港公益足球赛直播时间+入口
- 中通快递宣布标快服务升级!全国66城送货上门 不上必赔
- 首发骁龙8 Gen2领先版+24GB内存!红魔8S Pro真机首度公布:今年唯一真全面屏|环球关注
- 特斯拉一统充电江湖!沃尔沃宣布接入超充网络-热讯
- 非常明亮的火球在德国上空爆炸:闪耀夜空 随后解体_环球热点评
- 家长千万不要随意私拆学生档案:违规还违法 影响求职入学
- 全球观焦点:伦理片日本 在线(关于伦理片日本 在线的基本详情介绍)
- 石药集团CPO301获加拿大临床试验批准
- 【全球报资讯】清华“轮椅博士”毕业了,他选择……
广告
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
RabbitMQ的死信队列,延时队列
【资料图】
死信队列简介
RabbitMQ 的死信队列(Dead Letter Queue)是一种特殊的队列,用于存储那些被标记为“死信”的消息。所谓死信即无法被正常消费和处理的消息,通常是由于一些特定的情况或条件导致的,比如过期、重试次数超过限制等。
普通消息成为死信的常见原因有
- 消息被拒(basic.reject or basic.nack)丢弃消息(requeue=false);
- 消息过期:当消息的生存周期超过了设置的过期时间,即消息在队列中等待被消费的时间超过了预定的时间。(可以通过设置 x-message-ttl 参数来指定消息的过期时间 或者 可以为每条消息单独设置过期时间。通过在消息的属性中设置 expiration 字段,以毫秒为单位指定消息的过期时间)
- 队列达到最大长度:当队列中的消息数量超过了设置的最大长度时,新到达的消息无法进入队列,而被视为死信。(创建队列时指定" x-max-length参数设置队列最大消息数量)
死信处理过程
消息被拒
class Program{static IConnectionFactory factory = new ConnectionFactory(){HostName = "192.168.100.2",UserName = "uat",Password = "137955aaA",VirtualHost = "uat_vhost"};/// /// 生产者/// public static void SendMessage(){//死信交换机string dlxexChange = "dlx.exchange";//死信队列string dlxQueueName = "dlx.queue";//消息交换机string exchange = "direct.exchange";//消息队列string queueName = "direct.queue";using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){//创建死信交换机channel.ExchangeDeclare(dlxexChange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建死信队列channel.QueueDeclare(dlxQueueName, durable: true, exclusive: false, autoDelete: false);//死信队列绑定死信交换机channel.QueueBind(dlxQueueName, dlxexChange, routingKey: dlxQueueName);// 创建消息交换机channel.ExchangeDeclare(exchange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建消息队列,并指定死信队列channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments:new Dictionary { { "x-dead-letter-exchange",dlxexChange}, //设置当前队列的DLX(死信交换机) { "x-dead-letter-routing-key",dlxQueueName}, //设置DLX的路由key,DLX会根据该值去找到死信消息存放的队列 });//消息队列绑定消息交换机channel.QueueBind(queueName, exchange, routingKey: queueName);string message = "hello rabbitmq message";var properties = channel.CreateBasicProperties();properties.Persistent = true;//发布消息channel.BasicPublish(exchange: exchange, routingKey: queueName, basicProperties: properties, body: Encoding.UTF8.GetBytes(message));Console.WriteLine($"向队列:{queueName}发送消息:{message}");}}}/// /// 消费者/// public static void Consumer(){//死信交换机string dlxexChange = "dlx.exchange";//死信队列string dlxQueueName = "dlx.queue";//消息交换机string exchange = "direct.exchange";//消息队列string queueName = "direct.queue";var connection = factory.CreateConnection();{//创建信道var channel = connection.CreateModel();{//创建死信交换机channel.ExchangeDeclare(dlxexChange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建死信队列channel.QueueDeclare(dlxQueueName, durable: true, exclusive: false, autoDelete: false);//死信队列绑定死信交换机channel.QueueBind(dlxQueueName, dlxexChange, routingKey: dlxQueueName);// 创建消息交换机channel.ExchangeDeclare(exchange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建消息队列,并指定死信队列channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments:new Dictionary { { "x-dead-letter-exchange",dlxexChange}, //设置当前队列的DLX { "x-dead-letter-routing-key",dlxQueueName}, //设置DLX的路由key,DLX会根据该值去找到死信消息存放的队列 });//消息队列绑定消息交换机channel.QueueBind(queueName, exchange, routingKey: queueName);var consumer = new EventingBasicConsumer(channel);channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: true);consumer.Received += (model, ea) =>{//处理业务var message = Encoding.UTF8.GetString(ea.Body.ToArray());Console.WriteLine($"队列{queueName}消费消息:{message},不做ack确认");//不ack(BasicNack),且不把消息放回队列(requeue:false)channel.BasicNack(ea.DeliveryTag, false, requeue: false);};channel.BasicConsume(queueName, autoAck: false, consumer);}}}static void Main(string[] args){SendMessage();Consumer();Console.ReadLine();}}
不ack(BasicNack),且不把消息放回队列(requeue:false),产生死信队列
延时队列(相同的过期时间)
延时队列通常与死信队列结合使用,以实现消息的延迟投递和处理。它的基本思想是给消息队列设置消息的过期时间(TTL),当消息在一定时间内未被消费者处理时,将其标记为过期并发送到死信队列。
class Program{static IConnectionFactory factory = new ConnectionFactory(){HostName = "192.168.100.2",UserName = "uat",Password = "137955aaA",VirtualHost = "uat_vhost"};/// /// 生产者/// public static void SendMessage(){//死信交换机string dlxexChange = "dlx.exchange";//死信队列string dlxQueueName = "dlx.queue";//消息交换机string exchange = "direct.exchange";//消息队列string queueName = "direct.queue.delay";using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){//创建死信交换机channel.ExchangeDeclare(dlxexChange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建死信队列channel.QueueDeclare(dlxQueueName, durable: true, exclusive: false, autoDelete: false);//死信队列绑定死信交换机channel.QueueBind(dlxQueueName, dlxexChange, routingKey: dlxQueueName);// 创建消息交换机channel.ExchangeDeclare(exchange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建消息队列,并指定死信队列channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments:new Dictionary { { "x-dead-letter-exchange",dlxexChange}, //设置当前队列的DLX(死信交换机) { "x-dead-letter-routing-key",dlxQueueName}, //设置DLX的路由key,DLX会根据该值去找到死信消息存放的队列 { "x-message-ttl",3000} });//消息队列绑定消息交换机channel.QueueBind(queueName, exchange, routingKey: queueName);string message = "hello rabbitmq message";var properties = channel.CreateBasicProperties();properties.Persistent = true;//发布消息channel.BasicPublish(exchange: exchange, routingKey: queueName, basicProperties: properties, body: Encoding.UTF8.GetBytes(message));Console.WriteLine($"{DateTime.Now}队列:{queueName}发送消息:{message}");}}}/// /// 消费延时队列/// public static void Consumer_delay(){//死信交换机string dlxexChange = "dlx.exchange";//死信队列string dlxQueueName = "dlx.queue";var connection = factory.CreateConnection();{//创建信道var channel = connection.CreateModel();{//创建死信交换机channel.ExchangeDeclare(dlxexChange, type: ExchangeType.Direct, durable: true, autoDelete: false);//创建死信队列channel.QueueDeclare(dlxQueueName, durable: true, exclusive: false, autoDelete: false);//死信队列绑定死信交换机channel.QueueBind(dlxQueueName, dlxexChange, routingKey: dlxQueueName);var consumer = new EventingBasicConsumer(channel);channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: true);consumer.Received += (model, ea) =>{//处理业务var message = Encoding.UTF8.GetString(ea.Body.ToArray());Console.WriteLine($"{DateTime.Now}队列{dlxQueueName}消费消息:{message}");channel.BasicAck(ea.DeliveryTag, false);};channel.BasicConsume(dlxQueueName, autoAck: false, consumer);}}}static void Main(string[] args){Task.Factory.StartNew(() =>{for (int i = 0; i < 10; i++){SendMessage();System.Threading.Thread.Sleep(1000);}});Consumer_delay();Console.ReadLine();}}
延时队列(不同的过期时间)
延时队列处理,不同的过期时间的消息,会堵塞后面的消息,导致过期了还没消费。可以通过rabbitmq_delayed_message_exchange 插件,解决这个问题。通过该插件,可以在 RabbitMQ 中实现延时消息投递和消费。
class Program{static IConnectionFactory factory = new ConnectionFactory(){HostName = "192.168.100.2",UserName = "uat",Password = "137955aaA",VirtualHost = "uat_vhost"};/// /// 生产者/// public static void SendMessage(){//延时交换机string delayExchange = "dlx.exchange.delayed";//延时队列string delayQueueName = "dlx.queue.delayed";using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){//创建延时交换机channel.ExchangeDeclare(delayExchange, type: "x-delayed-message", durable: true, autoDelete: false, new Dictionary {{ "x-delayed-type","direct"}});//创建死信队列channel.QueueDeclare(delayQueueName, durable: true, exclusive: false, autoDelete: false);//死信队列绑定死信交换机channel.QueueBind(delayQueueName, delayExchange, routingKey: delayQueueName);string message = "hello rabbitmq message 10s后处理";var properties = channel.CreateBasicProperties();properties.Persistent = true;properties.Headers = new Dictionary { { "x-delay", "10000" } };//发布消息channel.BasicPublish(exchange: delayExchange, routingKey: delayQueueName, basicProperties: properties, body: Encoding.UTF8.GetBytes(message));Console.WriteLine($"{DateTime.Now}队列:{delayQueueName}发送消息:{message}");message = "hello rabbitmq message 5s后处理";properties = channel.CreateBasicProperties();properties.Persistent = true;properties.Headers = new Dictionary { { "x-delay", "5000" } };channel.BasicPublish(exchange: delayExchange,routingKey: delayQueueName,basicProperties: properties,body: Encoding.UTF8.GetBytes(message));Console.WriteLine($"{DateTime.Now}队列:{delayQueueName}发送消息:{message}");}}}/// /// 消费延时队列/// public static void Consumer_delay(){//死信队列string dlxQueueName = "dlx.queue.delayed";var connection = factory.CreateConnection();{//创建信道var channel = connection.CreateModel();{var consumer = new EventingBasicConsumer(channel);channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: true);consumer.Received += (model, ea) =>{//处理业务var message = Encoding.UTF8.GetString(ea.Body.ToArray());Console.WriteLine($"{DateTime.Now}队列{dlxQueueName}消费消息:{message}");System.Threading.Thread.Sleep(20);channel.BasicAck(ea.DeliveryTag, false);};channel.BasicConsume(dlxQueueName, autoAck: false, consumer);}}}static void Main(string[] args){SendMessage();Consumer_delay();Console.ReadLine();}}
关键词:
RabbitMQ的死信队列,延时队列
复旦微电间接股东章勇被批评 正拟发不超20亿可转债|环球观点
Uzi请假原因找到了!担任亚运会《英雄联盟》国家队教练:指导下路
5G专利全球第一 华为向日本公司收专利费:日企有三大麻烦了
通讯!笔记本电脑坐上过山车 下半年或复苏
全球通讯!任天堂打造!《超级马力欧兄弟大电影》7月14日上线网播:B站、腾讯已预告
多女子开直播看望杭州跳河救人外卖小哥 本人回应:别利用我带货
安徽省利辛县发布大风蓝色预警 环球关注
直播系统源码知识分享:解你忧愁!降低直播延迟的实现 全球热议
焦点信息:2023成都迎大运蓉港公益足球赛直播时间+入口
中通快递宣布标快服务升级!全国66城送货上门 不上必赔
首发骁龙8 Gen2领先版+24GB内存!红魔8S Pro真机首度公布:今年唯一真全面屏|环球关注
特斯拉一统充电江湖!沃尔沃宣布接入超充网络-热讯
非常明亮的火球在德国上空爆炸:闪耀夜空 随后解体_环球热点评
家长千万不要随意私拆学生档案:违规还违法 影响求职入学
全球观焦点:伦理片日本 在线(关于伦理片日本 在线的基本详情介绍)
鹿驻(关于鹿驻的基本详情介绍)_播报
台版苹果手机怎么样(台版苹果手机)
山东东营一男子驾车将妻子反复碾压致死,已被刑拘
甘肃张掖:人工增雨作业助力祁连山生态修复
世界快看点丨苹果内部体验Vision Pro:重量太大
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
七彩化学再收警示函 因业绩预告不准、信披不及时 环球速看
山东省纪委监委网站通报
石药集团CPO301获加拿大临床试验批准
全球通讯!最新!500亿芯片巨头遭遇"空袭"!周鸿祎官宣:考上清华大学研究生
【环球时快讯】天津南1000千伏变电站主变压器扩建工程已取得核准和水土保持批复
钢城区这个片区房屋征收补偿方案发布!
国网新疆岳普湖县供电开展乡村振兴领域腐败问题专项整治工作
有人假冒国家机关名义伪造文件!农业农村部郑重声明|天天观焦点
圣洁防水3奖、1讲、1展、1演闪耀长春丙纶大会
天天动态:汉字找茬王高考显眼包怎么过
【世界聚看点】墙裂推荐!4类免费自媒体工具,你一定用的上!
浙能集团与大连造船签署绿色航运战略合作备忘录
终于理解为什么都说陈妍希“不上镜”,她本人原来长这样
全球最大水光互补电站——柯拉光伏电站投产发电_天天快报
新密2村书记获评郑州市“十佳”
广州考古发现珠三角面积最大的商时期文化遗存|快消息
【全球报资讯】清华“轮椅博士”毕业了,他选择……
世界快播:猪哥电影全集(猪哥电影)
搞机研究所 | 语音好用观感差强人意 岚图梦想家车机体验_环球热点评
政企协同应对电网迎峰度夏_每日讯息
【天天热闻】上杭:推进安全生产标准化建设 提升企业安全生产管理水平
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
环球速读:福利来啦!河北省社保惠企政策全攻略看这里→
东芝开发出1.7秒测量二氧化碳浓度的技术
米哈游开放世界射击游戏渲染图曝光:或已重启
每日关注!快讯丨万科南方区域人事调整:王维忠将出任商业事业部总经理
中国驻美国使馆发言人就美方以涉芬太尼问题逮捕和起诉中国公民和企业答记者问 焦点热文
桐庐县农业农村局待遇怎么样
环球热消息:AIGC板块暴跌6%,北向资金抄底,胡锡进抄底,你跟不跟?
天天新资讯:迪迦是最强的奥特曼没有错,但有一个前提条件!
2023广州中考成绩几号公布-今日热议
依托青山绿水走上致富路——高原藏族村落扎毛村的振兴之变_世界滚动
世界今日报丨4天票房破7亿,《消失的她》证明了,朱一龙的“烂赌鬼”又爆了
短讯!交控科技董事长被留置调查,副董事长邓爱群暂履行公司董事长职责
当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
全球信息:25岁贵州女子到青岛旅游失联,6天后遗体在海上被发现
讯息:红魔 8S Pro 手机官宣首发 24GB 超大内存,截胡一加和 realme
即时:上班965是什么意思 加班12127什么意思
浏览器排行榜2013 浏览器排行榜2021,国产浏览器翻翻上榜
数百万人被推向破产边缘! 高利率重压下,英国抵押贷款灾难正在酝酿|每日精选
端午假期 兰州机场旅客吞吐量达14.9万人次
今日聚焦!中国酒店业绿色发展论坛落地广州 氧吧酒店联盟战略发布
微粒贷怎么申请开通 开通方法如下
通俗歌曲杂志曲目_通俗歌曲杂志
世界速看:米津玄师为《最终幻想16》创作歌曲 随之绘制“青狼”封面艺术图
港股异动 | 阿里影业(01060)涨超5%领涨电影概念股 端午档票房破9亿元 暑期档影片储备逐步释放-全球时讯
呵护求学就业梦想 以“兴才”助力“成才”
ET5 Touring引人瞩目 可蔚来还是更需要一款“Model Y”_微头条
焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
美股集体收高:道指结束六连跌,热门中概股普涨-今日热议
今日播报!整组|2023年6月26日枝江新闻
天天看热讯:psp游戏无法运行8002148怎么办_PSP游戏无法运行80020148
【世界热闻】你手机里必备的软件都有什么?
世界聚焦:兴义市万屯镇佐舍村被征不能撂荒土地招租公告
今日热闻!《蓝精灵2:绿石之囚》11/2推出 新预告片公布
观焦点:http ntce neea edu cn中国教育网-ncte中国教育网
励志成语大全四字-励志成语大全四字成语|环球今日讯
最终幻想16名符其实奖杯成就获得方法攻略
宇邦新材(301266)850万股限售股将于6月27日解禁上市,占总股本8.17%_全球焦点
世界观天下!不看信用不看负债的贷款有没有 哪些贷款好申请
当前热点-投资总额预计超30亿元!知识城签约12个粤新合作项目
国际货币基金组织要求欧盟各国央行积极应对通胀_天天亮点
天下秀(600556.SH):厦门赛富和嘉兴腾元累计减持5%股份
新动态:大专一般是几年制的_大专几年制
国内首款农业AI对话机器人“小田”发布
世界新消息丨说说设计模式~责任链模式
如何将mp4文件解复用并且解码为单独的.yuv图像序列以及.pcm音频采样数据?-世界实时
演唱会还有一个月门票退不掉 秀动平台建议顾客自行转让 全球要闻
合伙人侵权怎么赔偿
环球关注:锡南科技6月27日成功登陆创业板 上市首日收盘上涨20.59%
天天最资讯丨中国航空产业生态链具有全球竞争力——访空客中国首席执行官徐岗
【环球报资讯】新华网:刘健辞去公司董事长职务
吞食天地2中文版怎么合成武将 吞食天地2中文版合成武将配方
世界今日报丨鬼魅魍魉什么意思_鬼魅魍魉怎么读
世子凶猛(世子) 快播
新买的手机号被别人注册了微信怎么办不是用了微信_新买的手机号被别人注册了微信怎么办
天天热讯:叶圣陶的教育思想内容(叶圣陶的教育思想的精髓)