方法:
1、QueueDeclare 聲明隊列
1 public static QueueDeclareOk QueueDeclare(String queue, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary<String, Object> arguments);
queue:聲明的隊列名稱
durable:是否持久化,是否將隊列持久化到mnesia數據庫中,有專門的表保存我們的隊列聲明。
exclusive:排外,①當前定義的隊列是connection的channel是共享的,其他的connection是訪問不到的。②當connection關閉的時候,隊列將被刪除。
autoDelete:自動刪除,當最后一個consumer(消費者)斷開之后,隊列將自動刪除。
arguments:參數是rabbitmq的一個擴展,功能非常強大,基本是AMPQ中沒有的。
2、QueueDeclareNoWait 聲明隊列無需等待
1 public static Void QueueDeclareNoWait(String queue, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary<String, Object> arguments);
3、QueueDeclarePassive 消極的隊列聲明
1 public static QueueDeclareOk QueueDeclarePassive(String queue);
被用來檢測隊列是否存在,不存在則拋出異常,存在則不做任何操作。
參數:
1.x-message-ttl:Number
1個發布的消息在隊列中存在多長時間后被取消(單位毫秒)
*可以對單個消息設置過期時間
1 //設置消息屬性 2 var properties = channel.CreateBasicProperties(); 3 properties.Headers = new Dictionary<String, Object>(); 4 properties.Headers.Add("username", "fanqi"); 5 //設置過期時間 6 properties.Expiration = "8000"; 7 //發布消息 8 //String exchange, 交換機名稱 9 //String routingKey, routingKey 10 //IBasicProperties basicProperties, 發布屬性 11 //Byte[] body 消息內容 12 channel.BasicPublish("headersExchange", string.Empty, properties, Encoding.UTF8.GetBytes("來自.net的問候"));
2.x-expires:Number
當Queue(隊列)在指定的時間未被訪問,則隊列將被自動刪除。
3.x-max-length:Number
隊列所能容下消息的最大長度。當超出長度后,新消息將會覆蓋最前面的消息,類似於Redis的LRU算法。
4.x-max-length-bytes:Number
限定隊列的最大占用空間,當超出后也使用類似於Redis的LRU算法。
5.x-overflow:String
設置隊列溢出行為。這決定了當達到隊列的最大長度時,消息會發生什么。有效值為Drop Head或Reject Publish。
6.x-dead-letter-exchange:String
有時候我們希望當隊列的消息達到上限后溢出的消息不會被刪除掉,而是走到另一個隊列中保存起來。
7.x-dead-letter-routing-key:String
如果不定義,則默認為溢出隊列的routing-key,因此,一般和6一起定義。
8.x-max-priority:Number
如果將一個隊列加上優先級參數,那么該隊列為優先級隊列。
1)、給隊列加上優先級參數使其成為優先級隊列
x-max-priority=10【值不要太大,本質是一個樹結構】
2)、給消息加上優先級屬性
1 //設置消息屬性 2 var properties = channel.CreateBasicProperties(); 3 properties.Headers = new Dictionary<String, Object>(); 4 properties.Headers.Add("username", "fanqi"); 5 //設置過期時間 6 properties.Expiration = "8000"; 7 //設置優先級 8 properties.Priority = 7; 9 //發布消息 10 //String exchange, 交換機名稱 11 //String routingKey, routingKey 12 //IBasicProperties basicProperties, 發布屬性 13 //Byte[] body 消息內容 14 channel.BasicPublish("headersExchange", string.Empty, properties, Encoding.UTF8.GetBytes("來自.net的問候"));
通過優先級特性,將一個隊列編程stack(堆棧)
9.x-queue-mode:String
隊列類型 x-queue-mode=lazy 懶隊列,在磁盤上盡可能多地保留消息以減少RAM使用;如果未設置,則隊列將保留內存緩存以盡可能快地傳遞消息。
10.x-queue-master-locator:String
將隊列設置為主位置模式,確定在節點集群上聲明時隊列主位置所依據的規則。