參考鏈接: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。。。。
