第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡介
RabbitMQ 簡介
首頁 慕課教程 RabbitMQ 入門教程 RabbitMQ 入門教程 消息發(fā)送模式實戰(zhàn)之普通隊列模式與工作隊列模式

消息發(fā)送模式實戰(zhàn)之普通隊列模式與工作隊列模式

1. 前言

Hello,大家好。在上述小節(jié)中,我們對 RabbitMQ 中的發(fā)布訂閱消息發(fā)送模式的實戰(zhàn)內(nèi)容進行了介紹,并針對不同的業(yè)務(wù)場景進行了代碼實現(xiàn)。在本小節(jié)中,我們將對 RabbitMQ 中消息發(fā)送模式的最后兩種模式的實戰(zhàn)內(nèi)容進行介紹。

本小節(jié)會介紹 RabbitMQ 中最后的兩種消息發(fā)送模式的實戰(zhàn)部分,包括普通隊列模式的基礎(chǔ)概念回顧與代碼實現(xiàn),以及工作隊列模式的基礎(chǔ)概念回顧與代碼實現(xiàn),在將這兩部分的實戰(zhàn)內(nèi)容介紹完畢之后,RabbitMQ 中所有的消息發(fā)送模式中的實戰(zhàn)內(nèi)容就全部介紹完畢了。

本節(jié)主要內(nèi)容:

  • 普通隊列模式與工作隊列模式基礎(chǔ)概念回顧;

  • 普通隊列模式與工作隊列模式代碼實操。

2.普通隊列模式與工作隊列模式基礎(chǔ)概念回顧

在我們正式開始使用代碼進行實戰(zhàn)之前,讓我們先來回顧一下普通隊列模式與工作隊列模式的基礎(chǔ)概念等相關(guān)內(nèi)容。

2.1 普通隊列模式基礎(chǔ)概念回顧

定義:

普通隊列模式,即最簡單的消息發(fā)送模式,不使用任何交換機,由生產(chǎn)者、隊列、消費者組合完成消息的發(fā)送和接收。

描述:

普通隊列模式,由于其操作簡單,所以又被稱為簡單模式,如下圖所示:

普通隊列模式,在生產(chǎn)者生產(chǎn)完消息之后,直接將消息發(fā)送到隊列中去,不經(jīng)過交換機進行處理,然后由消費者直從消息隊列中獲取消息并消費。在這個過程中間,沒有我們需要特別注意的地方。

2.2 工作隊列模式基礎(chǔ)概念回顧

定義:

工作隊列模式,和普通隊列模式有點像,都是不使用任何交換機,由生產(chǎn)者、隊列、消費者組合完成消息的發(fā)送和接收,只不過工作隊列支持存在多個消費者,而普通隊列模式只支持一個消費者。

描述:

工作隊列模式下,生產(chǎn)者生產(chǎn)出消息后,直接將消息發(fā)送到消息隊列中,然后多個消費者按照一個隨機的順序來依次獲取消息并消費。

存在多個消費者消費消息時,下一個消費者只能等待上一個消費者消費結(jié)束后才能獲取到消息并進行消費。

這就提示我們,在實際工作中,我們可以把費時的業(yè)務(wù)操作交給 RabbitMQ 去做,這樣可以提升代碼的執(zhí)行效率。

Tips:
1. 無論是普通隊列模式,還是工作隊列模式,其操作相對來說都比較簡單,適合很簡單的業(yè)務(wù)場景,同時,初學(xué)者更易于理解。
2. 工作隊列模式和發(fā)布訂閱模式的功能很相似,都是用于消息需要進行群發(fā)的場景,對于這兩種模式,我們在實際工作中應(yīng)該仔細斟酌,到底使用哪種消息發(fā)送模式最合適。

3 普通隊列模式與工作隊列模式

3.1 普通隊列模式代碼實操

在回顧完普通隊列模式的基礎(chǔ)概念之后,讓我們來看一下如何使用代碼來實現(xiàn)這種普通隊列模式:

實現(xiàn)代碼:

ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.0.1");
connectionFactory.setPort(5672);
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.close();
connection.close();

代碼解釋:

第 1-5 行,我們使用了 RabbitMQ 的 ConnectionFactory 連接工廠,來初始化了一些獲取 RabbitMQ 連接的必要參數(shù)。

第 6 行,我們從 RabbitMQ 的連接工廠中,獲取到了一個 RabbitMQ Conneciton 連接實例。

第 7 行,我們通過 RabbitMQ 連接實例,創(chuàng)建了一個 channel 通道,為之后的消息通信提供媒介。

第 8 行,我們使用 channel 的 queueDeclare 方法,來聲明一個消息隊列,并綁定到我們的 channel 頻道上。

第 9-10 行,在處理完通道與連接實例之后,我們分別調(diào)用了 close 方法,將建立的通信連接和通道進行關(guān)閉,以節(jié)省資源開銷。

由于普通隊列模式不需要交換機的參與,只需要一個生產(chǎn)者、一個消費者,還有一個消息隊列,即可完成,這就是普通隊列模式。

3.2 工作隊列模式代碼實操

我們來看工作隊列模式的代碼實現(xiàn):

實現(xiàn)代碼:

ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.0.1");
connectionFactory.setPort(5672);
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
Consumer consumer = new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,byte[] body) throws IOException {
        String msg = new String(body, "UTF-8");
        // 業(yè)務(wù)處理
    }
};
channel.basicConsume(QUEUE_NAME, true, consumer);
channel.close();
connection.close();

代碼解釋:

第 1-7 行,代碼和第一種業(yè)務(wù)場景相似,這里不再贅述。

第 8-16 行,我們通過使用 new DefaultConsumer 匿名內(nèi)部類的形式,來依次從消息隊列中獲取消息,在獲取到消息之后,我們可以再 handleDevelivery 方法中處理我們的業(yè)務(wù)邏輯。

第 17 行,我們使用 channel 的 basicConsume 方法來將我們獲取到的消息進行一個消費。

事實上,我們應(yīng)該使用 for 循環(huán),或者動態(tài)獲取的方式,來指定我們工作隊列模式中,所需要的消費者數(shù)量,這樣我們才能實現(xiàn)一種沒有交換機的消息群發(fā)模式,這就是工作隊列模式。

Tips: 我們可以發(fā)現(xiàn),在實現(xiàn)普通隊列模式和工作隊列模式時,我們并沒有指定 Routing Key ,因為這兩種消息發(fā)送模式不需要指定,這里需要同學(xué)們注意。

4. 小結(jié)

本小節(jié)為同學(xué)們詳細介紹了 RabbitMQ 消息發(fā)送模式之普通隊列模式和工作隊列模式的代碼實操等內(nèi)容,包括普通隊列模式和工作隊列模式基礎(chǔ)概念等內(nèi)容的回顧,以及普通隊列模式和工作隊列模式的代碼實現(xiàn),同學(xué)們需要理清代碼實現(xiàn)的思路和步驟。

寫到這里,我們對 RabbitMQ 中常見的 5 種消息發(fā)送模式的實戰(zhàn)內(nèi)容部分就全部介紹完畢了,在實際工作中,我們需要結(jié)合具體的業(yè)務(wù)場景,以及我們這些消息發(fā)送模式的基礎(chǔ)概念去篩選合適的消息發(fā)送模式,來完成我們的需求,這并不是一個隨便選擇的過程。