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
獲取通道 獲取通道
宣告交換器 宣告交換器
建立訊息 宣告佇列
釋出訊息 佇列交換器繫結
關閉通道 消費訊息
關閉連線 關閉通道 關閉連線
使用傳送方確認方式確認投遞