RabbitMQ及AMQP基本概念

2021-10-09 10:17:31 字數 1795 閱讀 8204

rabbitmq是目前使用非常廣泛的訊息中介軟體,它是基於amqp(advanced message queue protocol 高階訊息佇列協議)協議實現的。amqp是具有現代特徵的二進位制協議,是乙個提供統一訊息服務的應用層標準高層訊息佇列協議,是應用層協議的乙個開放標準,為面向訊息的中介軟體設計。

一.虛擬主機 virtual host

虛擬主機是乙個虛擬的位址,用於進行邏輯隔離,是最上層的訊息路由。乙個 virtual host裡面可以有若干個exchange和queue,但同乙個virtual host裡面不能有相同名稱的exchange或quene。

二.交換機exchange

交換機exchange負責接收訊息,根據路由配置**訊息到繫結的佇列。交換機的主要型別有:direct、topic、fanout。

1.direct exchange

所有傳送到direct exchange的訊息將被**到routingkey中指定的queue。

訊息生產者要指定exchange,然後通過路由規則,把訊息路由到指定的佇列。如果不指定exchange而是輸入空字串,可以使用rabbitmq自帶的exchange,就會按照routingkey去找完全匹配的佇列名,必須完全匹配才會被佇列接收,否則就訊息會被拋棄。

直連direct方式,傳送端和接收端的routingkey必須一致。或者傳送端的routingkey與接收quene的name一致,這種情況就與不指定exchange的方式類似。

所有傳送到topic exchange的訊息會被**到所有繫結該topic並匹配routingkey的佇列上。topic與routingkey進行模糊匹配。

fanout型別不處理路由鍵,效能是所有exchange中最快的。訊息會被**到與該交換機繫結的所有佇列上。

三.佇列queue

queue負責儲存訊息並將它們**給消費者。

四.binding

binding是exchange與queue之間的虛擬連線,binding中可以包含routing key。routing key是乙個路由規則,可用它來確定乙個特定路由。

五.網路通道channel

幾乎所有的操作都在channel中進行,是進行訊息讀寫的通道。客戶端可建立多個channel,每個channel代表乙個會話任務。

在實際工作中特別要注意,訊息傳送者傳送完訊息後,一定要記得關閉連線。關閉連線要由小到大關閉。

//記得要關閉相關的連線

channel.close();

connection.close();

六.message

訊息message,是伺服器與應用程式之間傳送的資料,由properties和body組成。properties可定義一些訊息的屬性,比如訊息優先順序,過期時間等;body則是訊息體的具體內容。

二 RabbitMQ簡介及AMQP協議

rabbitmq簡介 rabbitmq是開源的訊息 和佇列伺服器,是由erlang語言開發的,基於amqp協議 advanced message queuing protocol高階訊息佇列協議 的標準實現。具有良好的效能和時效性,同時還能夠非常好的支援集群和負載部署,非常適合在較大規模的分布式系統...

熟悉RabbitMQ與AMQP協議

1.訊息佇列的簡介 rabbitmq採用erlang語言開發。erlang語言由ericson設計,專門為開發concurrent和distribution系統的一種語言,在電信領域使用廣泛。otp open telecom platform 作為erlang語言的一部分,包含了很多基於erlang...

RabbitMQ與AMQP協議詳解

生產者傳送訊息到broker server rabbitmq 在broker內部,使用者建立exchange queue,通過binding規則將兩者聯絡在一起。exchange分發訊息,根據型別 binding的不同分發策略有區別。訊息最後來到queue中,等待消費者取走 exchange有多種型...