1. 程式人生 > 其它 >RabbitMQ 2 理解訊息通訊

RabbitMQ 2 理解訊息通訊

交換器和繫結

交換器型別:direct fanout topic

direct很簡單 如果路由鍵匹配的話 到對應的佇列

fanout 交換器 會將受到的資訊廣播到繫結的佇列上 將訊息投遞給所有在交換器上的佇列

topic交換器 不同源頭的資訊到達同一個佇列

虛擬主機和隔離:

vhost虛擬訊息伺服器 虛擬主機

通過在各個例項間提供邏輯分離 為不同應用程式安全保密的執行資料

是AMQP得概念得基礎,你必須連線時進行指定 。

vhost和許可權控制非常獨特,他們是唯一無法通過amqp協議建立的基元

可以通過Rabbitmq安裝路徑下。/sbin/目錄中的rabbitmqctl工具建立

一旦建立成功之後,就可以連結上去開始新增佇列和交換器 通過vhost保障了佇列和交換器得安全

佇列和交換器預設情況下無法倖免於伺服器重啟 durable屬性預設false true可以斷電後不重新建立佇列 但是設定為true還不夠

能從崩潰中恢復的訊息為持久化訊息 在訊息釋出之前,通過它的投遞模式選項設定為2來將訊息標記為持久化。還必須通過持久化的交換器到達持久化的佇列中才行

因此訊息崩潰必須:

投遞模式選選項設定為2(持久)

傳送到持久化的容器

到達持久化的佇列

不是所有的訊息都需要持久化 ,寫入磁碟要比寫入記憶體慢不止一點點 也會減少RabbitMQ伺服器每秒可處理的訊息總數。使用就持久化機制導致訊息吞吐量降低10倍也有可能。持久化訊息在叢集下工作得並不好。

什麼情況下使用永續性/持久化訊息呢?

首先你需要分析效能需求 你是否需要rabbitmq伺服器每秒100000條訊息呢 是就要確保訊息投遞

訊息持久化相關得一個概念是amop事務 由於釋出操作不返回資訊 怎末知道伺服器是否已經持久化訊息到硬碟了呢?伺服器可能在訊息寫入硬碟前就宕機了,訊息因此丟失,你卻不知道,這就是事務發揮作用得地方。

生產者得程式碼開始,需要完成以下任務: 消費者:

連線到rabbitmq 連線到rabbitmq

獲取通道 獲取通道

宣告交換器 宣告交換器

建立訊息 宣告佇列

釋出訊息 佇列交換器繫結

關閉通道 消費訊息

關閉連線 關閉通道 關閉連線

使用傳送方確認方式確認投遞