訊息
訊息包含兩部分內容,有效載荷和標籤。有效載荷指需要傳輸的資料,他可以是任何格式的內容;標籤描述了有效載荷,並且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...