RabbitMQ (十一) 消息的參數詳解
阿新 • • 發佈:2019-02-08
是個 gif public iba ret route timestamp odin amp
上篇文章講了聲明一個隊列時的參數設置,這篇文章主要說一說發布消息時的參數設置.
發布消息時的完整入參是這樣的:
channel.BasicPublish ( exchange: "test_exchange", routingKey: "", mandatory: false, basicProperties: null, body: Encoding.Default.GetBytes(msg) );
下面一一解釋:
exchange: 交換機名稱
routingKey:路由鍵
路由鍵的設置跟交換機的類型有關.
- 如果交換機的類型是"fanout",那麽不管這個參數傳入的是啥,哪怕是個空字符串(不能是null),也不管與這個交換機綁定的隊列到底有沒有設置路由鍵,設置的是什麽.通通當它們不存在.所有綁定到該交換機的隊列都會收到消息;
- 如果交換機的類型是"direct"或者"topic",那麽這個參數才有意義.
mandatory:
- 當為true時,如果exchange根據自身類型和第2個參數(routeKey)無法找到一個符合條件的queue,那麽會將消息返還給生產者;
- 當為false時,出現上述情形broker會直接將消息扔掉.
測試:
生產者
public class Producer { private const string QueueName = "test_queue"; private const string ExchangeName = "test_exchange"; public static void Send() {
using (IConnection connection = ConnectionHelper.GetConnection()) using (IModel channel = connection.CreateModel()) { channel.BasicQos(0, 1, false);
channel.BasicReturn += (s, e) => { byte[] bytes = e.Body; string str = Encoding.Default.GetString(bytes); Console.WriteLine("return message : " + str); };
string msg = "hello world "; channel.BasicPublish ( exchange: ExchangeName, routingKey: "找不到匹配的隊列", mandatory: true, basicProperties: null, body: Encoding.Default.GetBytes(msg) ); Console.WriteLine($"send {msg}"); } } }
運行結果:
basicProperties:消息的基本屬性
該參數是一個 IBasicProperties 類型的對象,具體有哪些屬性,我們可以看源代碼,不過我覺得通過管理後臺來了解這些參數,更直觀一些.
實在是有點多啊!
- content_type 消息內容的類型,如 "application/json"
- content_encoding 消息內容的編碼格式
- priority 消息的優先級,上面文章已經講過了.
- correlation_id 用於將RPC響應與請求相關聯.
- reply_to 回調隊列
- expiration 消息過期時間,單位毫秒.該參數值優先級>隊列參數設置中的消息生存期
- message_id 消息id
- timestamp 消息的時間戳
- type: 類型
- user_id: 用戶id
- app_id: 應用程序id
- cluster_id: 集群id
有兩個屬性,persistent 和 DeliveryMode ,它們的作用是一樣的.
Persistent : true 表示消息持久化.當然,前提是隊列也必須持久化.
管理後臺可以直接設置 DeliveryMode :
RabbitMQ (十一) 消息的參數詳解