RabbitMQ 聲明隊列時候的參數解釋


參考鏈接:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.6/rabbitmq-dotnet-client-3.6.6-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method-M:RabbitMQ.Client.IModel.BasicConsume(System.String,System.Collections.IDictionary,RabbitMQ.Client.IBasicConsumer)

創建Connection【高成本,tcp的連接】 可以創建無數個channel【低成本】

1.QueueDeclare方法 聲明隊列
public static QueueDeclareOk QueueDeclare(this IModel model, string queue = "", bool durable = false, bool exclusive = true, bool autoDelete = true, IDictionary<string, object> arguments = null);

durable:持久化
mnesia:erlang 數據庫,有專門的表去保存我們的隊列聲明

exclusive:排外
當前定義的隊列connection中的channel是共享的,其他的connection是訪問不到的
當conneciton.close的時候,queue被刪除

autoDelete:自動刪除
當前最后一個consumer斷開之后,autoDelete隊列

agruments:rabbitmq 的擴展


2.QueueDeclareNoWait方法 聲明隊列,不等待隊列創建結果,異步的

3.QueueDeclarePassive方法:消極的聲明創建,判斷隊列是否存在,不存在報錯


4.詳細說明下QueueDeclare方法agruments(rabbitmq的擴展)

參考地址:https://www.cnblogs.com/LiangSW/p/6224333.html

1. 我們要知道到底有哪些參數屬性。。。。

 

《1》 Message TTL

<1> Queue TTL =》 Per-Queue Message TTL 【給一個queue的所有message限定一個時間】
Cache的一個效果。。。
//聲明一個queue,里面的內容自發布起五秒后被刪除
channel.QueueDeclare("messagettlqueue", true, false, false, new Dictionary<string, object> { { "x-message-ttl", 5000 }

<2> Message TTL =》 單獨指定。【定制化的】

IBasicProperties basicProperties,
var properties = channel.CreateBasicProperties();
//設置過期時間
properties.Expiration = "5000";
channel.BasicPublish(null, "queue", properties, Encoding.UTF8.GetBytes("我五秒后就會消失"));


2.Auto Expire 【自動刪除】

《1》 當我們的queue在指定的時間未被訪問,就會被刪除。。。

//聲明一個queue,queue五秒內而且未被任何形式的消費,則被刪除
channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object> { { "x-expires", 5000 } });

3. Max Length 限定隊列的最大長度。。。 limit =1000

4. Max Length Bytes 限定隊列的最大占用空間大小。。。 【一般來說受制於內存,disk的大小限定】

//聲明一個queue,最大長度10,最大大小2048bytes
channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object>
{
{ "x-max-length", 10 },
{ "x-max-length-bytes", 2048}
});
redis,memcache。。。 LRU算法。。。淘汰機制。。。。

5.Dead letter exchagne 與 Dead letter routing key

何為Dead letter,,也就是說那些沒有被投遞出去的信件


一: Dead letter exchange

有時候我們不希望message被drop掉,而是走到另一個隊列中,又或者是保存起來。。。


二: Dead letter routing key

打到exchange中去的時候,他的routingkey是什么,,


和普通定義方式沒什么兩樣。。。

 

三: Maximum priority

優先級加到隊列上,就是一個優先級隊列,,, 【堆,大根堆,小根堆】

1. 給隊列貼上一個優先級的標簽。。。 x-max-priority =10, 這個值不要設置的太大。。。 節點更多。。 sortset。。。

不管你用什么語言實現,都是一個tree結構。。。。

2. 給message打上具體的優先級的value。。。 value<=10

MSMQ的message級別一般也就4,5中。。。low/normal/high/higher//........

我們通過“優先級”特性,,將一個queue 變成了 stack。。。。

 


免責聲明!

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



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