新增死信处理 它让你1小时精通RabbitMQ消息队列( 二 )

延时队列&死信队列
有些场景下,我们希望为使用的消息设定有效期 。在有效期内,这些消息有效可用;但过期后,这些消息将变得无效不可用 , 同时,它们还将自动进入一个称之为“死信”的队列 。
为了说明这些概念 , 我们还是来举一个具体的例子 。该例子的功能说明如下:

  • 首先,在RabbitMQ服务器上定义一个名为"bbq"的队列 。且设定此队列中存放的所有消息会在60秒后过期失效 。
  • 然后,在RabbitMQ服务器上定义一个与"bbq"队列对应的死信队列 。并连续从该死信队列中获取消息并把它们写入名为BB.txt的文件 。
  • 最后,向RabbitMQ服务器上的"bbq"队列发送3个消息 。
代码如下:
using DeveloperSharp.RabbitMQ;--------------------------            //定义bbq队列,其中存放的消息会在60秒后过期            var myQ = RabbitMQHelper.SetQueue("bbq", 60000);            //定义与bbq队列对应的死信队列            var expQ = RabbitMQHelper.GetQueue("bbq");            //向BB.txt这个文本文件中连续写入死信队列中的消息            expQ.UseMessage(t =>            {                System.IO.File.AppendAllText("D:/BB.txt", t.Message);                return true;            });            //向bbq队列发送3个消息            myQ.SendMessage("jinA");            myQ.SendMessage("jinB");            myQ.SendMessage("jinC");            /*            //【附加题】:若去掉注释让此语句执行,死信队列中将不会获得消息(为啥?自己推理)            RabbitMQHelper.UseMessage("bbq", t =>            {                return true;//若此处返回false,死信队列将会获得消息            });            */运行以上程序:
60秒之内,【BB.txt文件】中没有内容
60秒以后,【BB.txt文件】中显示出:jinAjinBjinC
通过以上例子,我们可简单预测一下,延时队列&死信队列常用在“限时消费”、“过期处理”等场景 。生活中最常见示例如:订单请在10分钟内支付完毕、等等之类功能...
使用消息服务对解耦分布式系统、实现发布/订阅、提高系统性能、等方面都有巨大用处,相信本文会扩展你的思维认知,让你在相关技术解决方案上有更多灵活思路+联想空间!

推荐阅读