RabbitMq 隊列的一些常見方法及參數


方法:

  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

  將隊列設置為主位置模式,確定在節點集群上聲明時隊列主位置所依據的規則。

  







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM