1. 程式人生 > >RabbitMQ的幾種工作模式

RabbitMQ的幾種工作模式

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進行對比。是我的,就接收。