新增死信處理 它讓你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分鐘內支付完畢、等等之類功能...
使用消息服務對解耦分布式系統、實現發布/訂閱、提高系統性能、等方面都有巨大用處,相信本文會擴展你的思維認知,讓你在相關技術解決方案上有更多靈活思路+聯想空間!

推薦閱讀