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)html

建立Connection【高成本,tcp的鏈接】 能夠建立無數個channel【低成本】redis

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隊列tcp

agruments:rabbitmq 的擴展this


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

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


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

參考地址: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。。。。

相關文章
相關標籤/搜索