在說正題之前先解釋一下交換機模式是個籠統的稱呼,它不是乙個單獨的模式(包括了訂閱模式,路由模式和主題模式),交換機模式是乙個比較常用的模式,主要是為了實現資料的同步。
首先,說一下訂閱模式,就和字面上的意思差不多主要就是乙個生產者,多個消費者,同乙個訊息被多個消費者獲取,先看一下官網的圖示
整體執行過程就和圖里一樣,生產者把訊息傳送到交換機,然後佇列繫結到交換機,訊息由交換機傳送到佇列,每乙個佇列都有乙個各自的消費者。這樣
就實現了乙個訊息被多個消費者所獲取,而且如果有新的消費者加入直接繫結佇列到交換機就可以了,大大的降低了系統間的耦合度。還有一點要注意的就是
當我們把訊息傳送到乙個沒有佇列繫結的交換機時,訊息就會丟失,因為訊息只能儲存在佇列,而交換機只做交換,不做儲存!
生產者**:
public class send消費者一號**:}
public消費者二號**:class
recv }}
public執行**之後可以看到class
recv2 }}
生產者傳送的訊息已經儲存在了交換機之中。檢視繫結關係如下圖所示:
所以,可以得出結論乙個訊息被多個消費者所消費。訂閱模式也存在著缺陷有時並不是所有資料都需要同步,所以用訂閱模式來做資料同步並不合理。於是就用到了路由模式。
官網圖示如下:
和訂閱模式比較類似,只是type變成了direct型別,路由模式也是先由生產者傳送訊息到交換機,然後在根據繫結鍵來判斷訊息傳送到哪乙個交換機。如下圖:
和訂閱模式的區別就是生產者傳送訊息時要先宣告訊息的型別,也就是說訊息會被哪類消費者所獲取
消費者和生產者保持乙個型別的時候,就可以接收到對應生產者所傳送的訊息了。從而可以過濾掉不需要的訊息型別。
主題模式個人感覺就和sql語句裡的like關鍵字一樣,不用保證訊息型別一樣,只要保證其相似就可以接收訊息了,相比於路由模式,
主題模式匹配率比較低,但是功能確提高了很多,減少了路由key的建立,如圖所示:
type變成了topic型別,至於其他方面和路由模式一樣就不多說了。
rabbitmq不同模式的交換機使用
交換機的功能主要是接收訊息並且 到繫結的佇列,交換機不儲存訊息,在啟用ack模式後,交換機找不到佇列會返回錯誤。交換機有四種型別 direct,topic,headers and fanout headers模式不怎麼使用了,這裡不做介紹 fanout模式 廣播模式 會將訊息傳送給所有佇列 fano...
rabbitmq 理論 主題交換機
儘管直連交換機能夠改善我們的系統,但是它也有它的限制 沒辦法基於多個標準執行路由操作。在我們的日誌系統中,我們不只希望訂閱基於嚴重程度的日誌,同時還希望訂閱基於傳送 的日誌。unix工具syslog就是同時基於嚴重程度 severity info warn crit.和 裝置 facility au...
RabbitMQ之Exchange交換機
rabbitmq中的exchange的作用 訊息佇列,訊息通過傳送和exchange之後最終到達的地方,到達queue的訊息及進入了等待消費的狀態。每個訊息都會被傳送到乙個或多個佇列。佇列的常用屬性name 佇列的名稱 durability 是否需要持久化,true為持久化 auto delete ...