RabbitMQ訊息中介軟體的執行機制。

2022-09-13 16:30:08 字數 1979 閱讀 7906

1.rabbitmq簡介

amqp,即advanced message queuing protocol,高階訊息佇列協議,是應用層協議的乙個開放標準,為面向訊息的中介軟體設計。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。amqp的主要特徵是面向訊息、佇列、路由(包括點對點和發布/訂閱)、可靠性、安全。

rabbitmq是乙個開源的amqp實現,伺服器端用erlang語言編寫,支援多種客戶端,如:python、ruby、.net、j**a、jms、c、php、actionscript、xmpp、stomp等,支援ajax。用於在分布式系統中儲存**訊息,在易用性、擴充套件性、高可用性等方面表現不俗。下面將重點介紹rabbitmq中的一些基礎概念,了解了這些概念,是使用好rabbitmq的基礎。amqp協議介紹rabbitmq就必須先介紹amqp協議,因為rabbitmq是它的一種實現而已。

2.rabbitmq模型

1)、direct 直接交換器,工作方式類似於單播,exchange會將訊息傳送完全匹配routing_key的queue。

2)、fanout廣播是式交換器,不管訊息的routing_key設定為什麼,exchange都會將訊息**給所有繫結的queue。

3)、topic主題交換器,工作方式類似於組播,exchange會將訊息**和routing_key匹配模式相同的所有佇列,比如,routing_key為user.stock的message會**給繫結匹配模式為 * .stock,user.stock, * . * 和#.user.stock.#的佇列。( * 表是匹配乙個任意片語,#表示匹配0個或多個片語)。

4)、headers訊息體的header匹配(ignore)。

message queue

1)、設定為持久化的佇列,queue中的訊息會在server本地硬碟儲存乙份,防止系統crash,資料丟失。

2)、設定為臨時佇列,queue中的資料在系統重啟之後就會丟失。

3)、設定為自動刪除的佇列,當不存在使用者連線到server,佇列中的資料會被自動刪除。

訊息只能儲存在佇列(queue)中。儘管訊息在rabbitmq和應用程式間流通,但是佇列卻是存在於rabbitmq內部。乙個佇列不受任何限制,它可以儲存你想要儲存的訊息量,它本質上是乙個無限的緩衝區。多個生產者可以向同乙個佇列傳送訊息,多個消費者可以嘗試從同乙個訊息佇列中接收資料。訊息佇列,提供了fifo的處理機制,具有快取訊息的能力。rabbitmq中,佇列訊息可以設定為持久化,臨時或者自動刪除。

3.通訊過程  

假設p1和c1註冊了相同的broker,exchange和queue。p1傳送的訊息最終會被c1消費。

p1生產訊息,傳送給伺服器端的exchange

exchange收到訊息,根據routinkey,將訊息**給匹配的queue1

queue1收到訊息,將訊息傳送給訂閱者c1

c1收到訊息,傳送ack給佇列確認收到訊息

queue1收到ack,刪除佇列中快取的此條訊息

consumer收到訊息時需要顯式的向rabbit broker傳送basic.ack訊息或者consumer訂閱訊息時設定auto_ack引數為true。在通訊過程中,佇列對ack的處理有以下幾種情況:

如果consumer接收了訊息,傳送ack,rabbitmq會刪除佇列中這個訊息,傳送另一條訊息給consumer。

如果cosumer接受了訊息, 但在傳送ack之前斷開連線,rabbitmq會認為這條訊息沒有被deliver,在consumer在次連線的時候,這條訊息會被redeliver。

如果consumer接受了訊息,但是程式中有bug,忘記了ack,rabbitmq不會重**送訊息。

rabbitmq2.0.0和之後的版本支援consumer reject某條(類)訊息,可以通過設定requeue引數中的reject為true達到目地,那麼rabbitmq將會把訊息傳送給下乙個註冊的consumer。

訊息中介軟體RabbitMQ

rabbitmq 是用erlang實現的乙個高併發高可靠amqp訊息佇列伺服器。rabbitmq 依賴於erlang環境,所以先要安裝erlang 執行 otp win32 r16b03.exe 再安裝rabbitmq 執行 rabbitmq server 3.2.3.exe 新增環境變數 rabb...

訊息中介軟體RabbitMQ

1非同步 不等待 2解耦 任務的序列變並行 3流量削峰 大任務量負載均衡 rabbitmq,kafka,flume amqp advanced message queue protocol 0 訊息 分為訊息頭和訊息體,訊息頭包含 路由鍵 routing key,優先順序priority,deliv...

訊息中介軟體RabbitMQ

1.1.為什麼使用訊息佇列 應用場景 常見的訊息中介軟體有?用於實現分布式系統模組與模組之間的訊息通訊。原理 原理就是生產者生產訊息,把訊息傳送給activemq。activemq接收到訊息,然後檢視有多少個消費者,然後把訊息 給消費者,此過程中生產者無需參與。消費者接收到訊息後做相應的處理和生產者...