RabbitMQ 是功能強大的開源消息代理。根據官網稱:也是使用量最普遍的消息隊列。就像他的口號「Messaging that just works」,開箱即用使用簡單,支持多種消息傳輸協議(AMQP、STOMP、MQTT)。算法
一個應用程序或者服務如何使用RabbitMq呢?服務器
消息微信
隊列負載均衡
注意:何時消息纔會從隊列中刪除呢?這裏涉及到一個消息確認的動做。消費者接收到的每一條消息都必須進行確認。纔會從隊列中刪除。消費者能夠經過AMQP的Basic.Ack命令顯式地向rabbtmq發送一個確認,或者在訂閱到隊列的時候就將autoAck屬性設置爲true;如:autoAck: true,一旦消費者接收消息,rabbitmq會自動視其確認了消息。
只要消費者不進行確認,rabbit將不會給該消費者發送消息,由於在上一條消息被確認以前,rabbit會認爲這個消費者並無準備好接收下一條消息的能力。
在沒有辦法正常確認消息,不能一直堵塞呀,好比消費者有bug。那就使用AMPQ的Basic.Reject命令;明確的拒絕這條消息,其中一個參數requeue若是設置了ture的話,Rabbit會把消息從新發給下一個訂閱的消費者。
若是你檢測到一條消息自己有錯誤而任何一個消費者都沒法處理的時候,就能夠把requeue設置爲false,rabbitmq會把消息從隊裏中移除,而不會把他發送給新的消費者。
注意:這裏你可使用對拒絕的消息進行特殊處理,好比發送到死信隊列或者專門收集的erro隊裏中。tcp
小結:隊列是amqp消息通訊的基礎模塊url
1.爲消息提供的處所,消息在此等待消費
2.對負載均衡來講,隊列是絕佳方案。只需附加一堆消費者,並讓rabbitmq以循環的方式均勻地分配發來的消息。
3.隊列是rabbit中消息的最後的終點。spa
交換器、綁定.net
交換器有四種類型:direct、fanout、topic和headers;每種類型實現了不一樣的路由算法,前三個比較經常使用。
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
2.fanout交換器代理
2.topic交換器code
這類交換器容許不一樣源頭的消息到達同一個隊列。路由算法-根據所有或部分路由鍵匹配將消息路由綁定的隊列上。使用場景-根據某些條件廣播到特定的隊列上。
小結:
本文主要總結了 apmq幾個主要元素:交換器,綁定,隊列。以及一個消息建立到消費者讀取消費的過程。
本文分享自微信公衆號 - dotNET知音(AAshiyou)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。