首先我們先看rabbitmq原理圖:
exchange交換器:
接受訊息和路由訊息,然後將訊息傳送給訊息佇列。對於每乙個虛擬主機內部,交換器有獨一無二的名字
。應用程式在其許可權範圍之內可以自由建立、共享、使用和銷毀交換例項。
持久交換器可以使持久的、臨時的、或者自動刪除的。持久直到顯式刪除時消失;臨時交換器會到伺服器
關閉為止消失;而一旦沒有應用程式使用就自動刪除為自動型的。
訊息佇列是乙個具名緩衝區,它們代表一組消費應用程式儲存訊息。應用程式在其許可權範圍內可以自由創
建、共享、和消費訊息佇列。它提供有限制的先進先出保證,當然是同等級的,如果訊息佇列不能被消費
者處理,他們可能會被打亂重新傳遞。訊息佇列可以保持在記憶體、硬碟、或者這兩種介質組合之中;訊息
佇列限定在虛擬主機範圍之中,訊息佇列儲存訊息,將訊息分發給乙個或者多個訂閱客戶端。
訊息佇列會跟蹤訊息的獲取情況,訊息要出隊就必須被獲取(acquire和consume)兩個動作,先執行acquire
,相當於對訊息加鎖。這阻止了多個客戶端消費同乙個訊息,也可以被用來做單個佇列多個消費者之間的
負載均衡
重要特性:持久化
佇列和交換機在建立時有乙個指定的標誌:durable(持久化)。durable的唯一含義就是具有這個標誌的隊
列和交換機會重啟之後重新建立。但是是否需要將訊息也設定成durable呢?應需求而定!乙個完全持久化
的應用如下:
exchange : durable;
queue : durable;
message : durable;
核心概念:繫結
所謂繫結就是將乙個特定的exchange和乙個特定的queue繫結起來,繫結關鍵字為:bindingkey,程式中聲
明方法為:
channel.queuebind("exchange","queue","bindingkey");
exchange和queue的繫結可以是多對多的關係,每個傳送給exchange的訊息都有乙個叫做routingkey的關鍵
字,exchange要想將訊息傳送給特定的佇列,該佇列與交換器的bindingkey必須與訊息的routingkey相匹
配才行。
RabbitMQ學習筆記1
博主從事網路程式設計3年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。生產者 消費者與訊息佇列 首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經...
RabbitMQ學習筆記 2
由乙個生產者進行生產,經由訊息佇列,被多個消費者消費。傳送端 如下 public class newtask 接收端 如下 public class worker public static void main string args throws exceptioncatch interrupte...
RabbitMQ學習筆記 1
rabbitmq的特性 開源 開發語言是erlang 平台和 商無關性 為幾乎全部開發語言提供了客戶端工具並能執行在所有主流計算機平台上 輕量級 執行核心功能以及諸如管理介面的外掛程式只需要不到40mb記憶體 面向大多數現代語言的客戶端開發庫 靈活控制訊息通訊的平衡性 效能與吞吐量平衡的靈活控制 高...