概述
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。
RabbitMQ提供了可靠的消息機制、跟蹤機制和靈活的消息路由,支持消息集群和分布式部署。適用於排隊算法、秒殺活動、消息分發、異步處理、數據同步、處理耗時任務、CQRS等應用場景。
使用
安裝Nuget包
連接
生產者
創建隊列
可以看到除了QueueDeclare之外還有兩種聲明隊列的方法。
QueueDeclareNoWait:無返回值版
QueueDeclarePassive:用來檢查隊列是否存在
發布消息
關閉通道及連接
消費者
定義消費者
接收消息
RabbitMQ采用消息應答機制,即消費者收到一個消息之后,需要發送一個應答,然后RabbitMQ才會將這個消息從隊列中刪除,如果消費者在消費過程中出現異常,斷開連接卻沒有發送應答,那么RabbitMQ會將這個消息重新投遞。
確認消息已被消費
或在啟動消費者時將此參數傳為true即可自動應答
啟動消費者
設置手動應答消息
關閉通道及連接
交換機Exchange
AMQP協議中的核心思想就是生產者和消費者隔離,生產者從不直接將消息發送給隊列。生產者通常不知道是否一個消息會被發送到隊列中,只是將消息發送到一個交換機。先由Exchange來接收,然后Exchange按照特定的策略轉發到Queue進行存儲。同理,消費者也是如此。Exchange 就類似於一個交換機,將各個消息分發到相應的隊列中。
RabbitMQ提供了四種Exchange模式:direct,fanout,topic,header
direct模式:轉發給routeKey完全匹配的隊列,在發布消息時未指定Exchange的情況下使用的rabbitMQ自帶default Exchange即direct模式
fanout模式:Exchange與隊列進行綁定操作,轉發給與之綁定的隊列
topic模式:與routeKey模糊匹配,符號“#”匹配一個或多個詞,符號“*”匹配不多不少一個詞
header模式:使用Headers(鍵值對)來匹配隊列,使用較少
引用
部分資料來源於 曉晨Master
[https://www.cnblogs.com/stulzq/p/7551819.html]