RabbitMQ訊息佇列的總結
什麼是訊息佇列?
MQ全稱為MessageQueue,訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過寫和檢索出入列隊的針對應用程式的資料(訊息)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。排隊指的是應用程式通過佇列來通訊。佇列的使用除去了接收和傳送應用程式同時執行的要求。其中較為成熟的MQ產品有IBMWEBSPHEREMQ。
使用的場景:在專案中,將一些無需即時返回且耗時的操作提取出來,進行了非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。
RabbitMQ的基本要素:Broker:簡單來說就是訊息佇列伺服器實體。 Exchange:訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。 Queue:訊息佇列載體,每個訊息都會被投入到一個或多個佇列。 Binding:繫結,它的作用就是把exchange和queue按照路由規則繫結起來。 Routing
Key:路由關鍵字,exchange根據這個關鍵字進行訊息投遞。 vhost:虛擬主機,一個broker裡可以開設多個vhost,用作不同使用者的許可權分離。 producer:訊息生產者,就是投遞訊息的程式。 consumer:訊息消費者,就是接受訊息的程式。 channel:訊息通道,在客戶端的每個連線裡,可建立多個channel,每個channel代表一個會話任務。
RabbitMQ的使用流程:
(1)客戶端連線到訊息佇列伺服器,開啟一個channel。 (2)客戶端宣告一個exchange,並設定相關屬性。 (3)客戶端宣告一個queue,並設定相關屬性。 (4)客戶端使用routing key,在exchange和queue之間建立好繫結關係。 (5)客戶端投遞訊息到exchange。
我的練習程式碼:
首先寫好了一個 ConnectionUtil 類 ,有一個靜態方法getConnection。獲取連線。減少程式碼的冗餘,
簡單模式 :生產者傳送訊息到佇列,消費者開始消費訊息
work模式:生產者傳送訊息到佇列,可以有多個worker開始消費資料,多個work可以設定 一條訊息只能被一個work消費 ,即紅包只能被一個人搶到。
釋出訂閱模式(群發)fanout:生產者傳送訊息到交換機,多個消費者宣告多個佇列,與交換機進行繫結,佇列中的訊息可以被所有消費者消費,即QQ群 訊息
路由模式routing/direct :生產者傳送訊息到交換機,同時定義了一個路由key,多個消費者宣告多個佇列,與交換機進行繫結,同時定義路由key,只有路由key相同的消費者才能消費資料
主題模式topic:與路由模式相同,但是路由key可以使正則表示式。