RabbitMQ 基本概念即原理

2021-10-07 00:07:49 字數 2122 閱讀 8128

訊息

訊息包含兩部分內容,有效載荷和標籤。有效載荷指需要傳輸的資料,他可以是任何格式的內容;標籤描述了有效載荷,並且rabbitmq用他來決定誰將獲得訊息的拷貝。

通道(channel)

rabbitmq使用通道來進行訊息互動。通道建立在真實tcp連線內的虛擬連線,每個通道都會被指派乙個唯一id(amqp庫會記住此id),amqp命令都是通過通道傳送出去的。

通過使用通道,避免了大量tcp連線的建立與銷毀,對於作業系統來說建立與銷毀tcp連線是非常昂貴的開銷。

佇列訊息達到佇列中並等待消費,消費者有兩種方式從佇列中接收訊息。

1). 持續訂閱,通過amqp的basic.consume命令訂閱

2). 單條訂閱,通過amqp的basic.get來接收訊息。

如果有消費者訂閱了佇列,訊息會立即傳送給消費者,但是如果沒有訂閱,訊息將在佇列中等待。

佇列是amqp訊息通訊的基礎模組

1). 為訊息提供了處所,訊息在此等待消費

2). 對負載均衡來說,佇列是乙個很好的方案

3). 佇列是rabbit中訊息的最後的終點,除非訊息進入了黑洞。

exclusive

如果設定為true,佇列將變成私有的,此時只有你的應用程式才能夠消費佇列訊息。

auto-delete

當最後乙個消費者取消訂閱的時候,佇列就會自動移除。

passive

用於檢驗佇列是否存在,若存在 queue.declare返回成功,否則queue.declare報錯。

交換器(路由)

rabbitmq根據路由鍵將訊息投遞到所匹配的佇列,匹配不上訊息將進入「黑洞」。

direct 交換器

如果路由鍵匹配上,訊息就被投遞到對應的佇列。

fanout 交換器

當傳送一條訊息到fanout交換器時,它會將訊息廣播到所有附加在此交換器上的佇列。

topic交換器

使來自不同源頭的訊息能夠到達同乙個佇列

虛擬主機vhost

vhost之間是相互隔離的,便於管理,保證佇列和交換器的安全。

rabbitmqctl add_vhost[test]

rabbitmqctl delete_vhost[test]

6. 訊息持久化

每個佇列和交換器都有乙個屬性 durable,預設為false,不支援持久化,即rabbit伺服器重啟後多有交換器和佇列會消失。因此當需要持久化的時候應該將其設定為true。

在訊息發布前,需要將其「投遞模式」(delivery mode)設定為2。

rabbitmq 通過持久化日誌檔案來實現訊息的持久化。當訊息發不到持久化交換器時,rabbit會在訊息提交到持久化檔案後才會傳送響應。

訊息確認

消費方1.消費者通過basic.ack命令顯示的向rabbitmq傳送乙個確認。

2.在訂閱到佇列的時候,就將auto_ack引數設定為true,這樣,一旦消費者接收訊息,rabbitmq會自動認為確認了訊息。

3.消費者通過命令告訴rabbitmq它已經正確的接收了訊息,同時rabbitmq才能安全地把訊息從佇列中刪除。如果消費者接收到一條訊息,在它確認之前從rabbit斷開連線(或者從佇列上取消訂閱),rabbitmq會認為這條訊息沒有分發,然後重新分發給下一條訂閱的消費者。如果消費者沒有傳送訊息確認,那麼rabbit將不會繼續分發訊息給此消費者。

如果想明確拒絕而不是確認收到該訊息的話,可以使用有兩種方式

a. 把消費者行rabbitmq伺服器斷開連線。

b. rabbitmq2.0.0及以上版本,那就使用amqp的basic.reject命令。requeue引數設為true,訊息會發給下乙個消費者,否則將刪除該訊息。

2. 傳送方

將通道設定為confirm模式

channel.confirm_delivery(callback=confirm_handler)

8. 發布者

連線到rabbitmq

獲取通道

宣告交換器

建立訊息

發布訊息

關閉通道

關閉連線

消費者連線到rabbitmq

獲取通道

宣告交換器

宣告佇列

將佇列和交換器繫結起來

消費訊息

關閉通道

關閉連線

RabbitMQ基本概念

總結一下傳送接收訊息的過程 www.wuxidoudizhu.com 通過上面例子對rabbitmq有乙個感性認識後,現在來介紹rabbitmq中的基本概念。broker 訊息佇列伺服器實體 訊息 每個訊息都有乙個路由鍵 routing key 的屬性。就是乙個簡單的字串。connection 應用...

RabbitMq 基本概念

rabbitmq是乙個基於amqp的訊息佇列,訊息佇列的主要目的實現訊息的生產者和消費者之間的解耦,支援多應用之間的非同步協調工作。開發語言 erlang 面向併發的程式語言。首先來一張訊息佇列的經典圖,可以劃分為三個角色 producer,queue,consumer 看到這個模型,如果對jdk的...

RabbitMQ 基本概念

amqp 核心概念 exchange 作用 是 amqp 和 rabbitmq 的核心元件 根據繫結關係和路由鍵為訊息提供路由,將訊息 至相應的佇列 有四種型別 direct topic fanout headers 使用較少 direct exchange 當 routing key 和 bind...