RabbitMQ 入門系列:1、MQ的應用場景的選擇與RabbitMQ安裝。
RabbitMQ 入門系列:2、基礎含義:鏈接、通道、隊列、交換機。
RabbitMQ 入門系列:3、基礎含義:持久化、排它性、自動刪除、強制性、路由鍵。
RabbitMQ 入門系列:4、基礎編碼:官方SDK使用:鏈接創建、單例改造、發送消息、接收消息。
RabbitMQ 入門系列:5、基礎編碼:交換機的進階介紹及編碼方式。
RabbitMQ 入門系列:6、保障消息:不丟失:發送方、Rabbit存儲端、接收方。
RabbitMQ 入門系列:7、保障消息:不重複消費:產生消息的唯一ID。
RabbitMQ 入門系列:8、擴展內容:接收資訊時:可否根據RoutingKey過濾監聽資訊,答案是不能。
RabbitMQ 入門系列:9、擴展內容:死信隊列:真不適合當延時隊列。
RabbitMQ 入門系列:10、擴展內容:延時隊列:延時隊列插件及其有限的適用場景。
前言:
本篇介紹:RabbitMQ 後續編碼涉及的基礎含義:持久化、排它性、自動刪除、強制性、路由鍵。
1、持久化:參數名:durable,默認值:false
在定義隊列或定義交換機的時候,涉及該參數。
持久化作用說明:
即將相關隊列的消息、或交換機的綁定資訊等內容,寫入硬碟備份,以便系統故障或重啟時,仍可以恢復原來的狀態,保障資訊不丟失。
缺點:
大量的硬碟寫入,會對IO造成不小的影響,因此RabbitMQ的部署環境,應該盡量避免和IO讀寫頻繁的應用在同一磁碟上,比如資料庫等。
示例程式碼:
channel.QueueDeclare("dead",durable:true, false, false);
2、排它性:參數名:exclusive,默認值:true
在定義隊列的時候,涉及該參數:
排它性的作用說明:
如果該參數為true,則該隊列僅允許創建它的連接進行寫入或讀取,同時當該鏈接關閉時,該隊列被刪除。
示例程式碼:
//定義隊列 channel.QueueDeclare("dead", durable: true, exclusive: true, false);
說明:
該參數為true時,持久化參數是無效的,因為鏈接關閉即釋放隊列。
3、自動刪除:參數名:autoDelete,默認值:true
在定義隊列的時候,涉及該參數:
自動刪除的作用說明:
如果該參數為true,則最後一名消費者關閉鏈接時,該隊列被刪除。
示例:
1、消費者A監聽隊列,然後關閉鏈接,則隊列被刪除; 2、消費者A監聽隊列、消費者B監聽隊列、消費者C監聽隊列,則當全部鏈接都關閉時,隊列被刪除。
示例程式碼:
//定義隊列 channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true);
4、強制性:參數名:mandatory,默認值:false
在發布消息的時候,涉及該參數:
強制性的作用說明:
發送的消息,通過交換機,找不到對應隊列時:
如果為false:消息會被丟棄。
如果為true:可以通過BasicReturn回調事件,拿到丟失的數據,進行二次處理。
示例程式碼:
using (var channel = Rabbit.Instance.DefaultConnection.CreateModel()) { channel.BasicReturn += (e,a) => { //回調事件。 }; //定義隊列 channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true); channel.BasicPublish("", "dead", mandatory:true, null, Encoding.UTF8.GetBytes("6秒就過期了1。")); }
5、路由鍵:參數名:routingKey,使用默認路由時,即為隊列名
在定義交換機,或者發布消息時,涉及該參數:
路由鍵的作用說明:
1、未定義交換機,使用默認direct方式時,發消息消息時:交換機=空值,routingKey=隊列名。 2、自定義交換機,也設置routingKey時,發布消息的時:填寫對應的交換機名和設置的routingKey。
更多路由鍵的使用,在交換機進隊介紹一文中介紹。
示例程式碼:
using (var channel = Rabbit.Instance.DefaultConnection.CreateModel()) { //定義隊列 channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true); channel.BasicPublish("", routingKey:"dead", false, null, Encoding.UTF8.GetBytes("6秒就過期了1。")); }
總結:
本篇介紹RabbitMQ的基礎參數含義,在後續的編碼中,遇到時候,可以反覆回來查看,加深理解。