RabbitMQ的幾種工作模式
阿新 • • 發佈:2018-12-25
maven:
<dependencies>
<!-- RabbitMQ的客戶端 -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
<dependency >
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId >commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.0.RELEASE</version >
</dependency>
</dependencies>
1、Work模式
一個生產者,多個消費者,每個消費者獲取到的訊息唯一。
1、 自動模式
消費者從訊息佇列獲取訊息後,服務端就認為該訊息已經成功消費。
2、 手動模式
消費者從訊息佇列獲取訊息後,服務端並沒有標記為成功消費
消費者成功消費後需要將狀態返回到服務端
2、訂閱模式
一個生產者傳送的訊息會被多個消費者獲取。
生產者:可以將訊息傳送到佇列或者是交換機。
消費者:只能從佇列中獲取訊息。
如果訊息傳送到沒有佇列繫結的交換機上,那麼訊息將丟失。
3、路由模式
1、 傳送訊息到交換機並且要指定路由key
2、 消費者將佇列繫結到交換機時需要指定路由key
4、萬用字元模式
將路由鍵和某模式進行匹配,此時佇列需要繫結在一個模式上,“#”匹配一個詞或多個詞,“*”只匹配一個詞。
5、RPC模式
(RPC) Remote Procedure Call Protocol 遠端過程呼叫協議
在一個大型的公司,系統由大大小小的服務構成,不同的團隊維護不同的程式碼,部署在不同的機器。但是在做開發時候往往要用到其它團隊的方法,因為已經有了實現。但是這些服務部署不同的機器上,想要呼叫就需要網路通訊,這些程式碼繁瑣且複雜,一不小心就會寫的很低效。RPC協議定義了規劃,其它的公司都給出了不同的實現。比如微軟的wcf,以及現在火熱的WebApi。
在RabbitMQ中RPC的實現也是很簡單高效的,現在我們的客戶端、服務端都是訊息釋出者與訊息接收者。
首先客戶端通過RPC向服務端發出請求
我這裡有一堆東西需要你給我處理一下,correlation_id:這是我的請求標識,erply_to:你處理完過後把結果返回到這個佇列中。
服務端拿到了請求,開始處理並返回
correlation_id:這是你的請求標識 ,原封不動的給你。 這時候客戶端用自己的correlation_id與服務端返回的id進行對比。是我的,就接收。