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

全部開發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡(jiǎn)介
RabbitMQ 簡(jiǎn)介
首頁 慕課教程 RabbitMQ 入門教程 RabbitMQ 入門教程 消息發(fā)送模式實(shí)戰(zhàn)之發(fā)布訂閱模式

消息發(fā)送模式實(shí)戰(zhàn)之發(fā)布訂閱模式

1. 前言

Hello,大家好。在上一小節(jié)中,我們對(duì) RabbitMQ 中的消息模式之直接模式和主題模式,做了基礎(chǔ)概念的回顧,以及對(duì)兩種不同的消息發(fā)送模式進(jìn)行了代碼實(shí)操,讓同學(xué)們可以清楚地知道實(shí)際的代碼應(yīng)該怎么編寫。

本小節(jié)將繼續(xù)介紹 RabbitMQ 中其他消息發(fā)送模式的代碼實(shí)操內(nèi)容,同樣地,在正式介紹代碼實(shí)操部分內(nèi)容之前,我們還是需要回顧一下,相應(yīng)消息發(fā)送模式的基礎(chǔ)概念。

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

  • 發(fā)布訂閱模式基礎(chǔ)概念回顧;

  • 發(fā)布訂閱模式代碼實(shí)操。

2.發(fā)布訂閱模式基礎(chǔ)概念回顧

在之前的小節(jié)中,我們對(duì)發(fā)布訂閱模式做了詳細(xì)的介紹,現(xiàn)在讓我們來回顧一下我們對(duì)發(fā)布訂閱模式做過的一些基礎(chǔ)性的介紹。

定義:

發(fā)布訂閱模式,即生產(chǎn)者發(fā)布消息,消費(fèi)者通過訂閱的方式來消費(fèi)消息。

其實(shí),發(fā)布訂閱模式的本質(zhì)還是生產(chǎn)者生產(chǎn)消息,消費(fèi)者從消息隊(duì)列中獲取消息并進(jìn)行消費(fèi)。

所謂的發(fā)布訂閱模式,只不過是給傳統(tǒng)的發(fā)送和接收起一個(gè)高大上的名字罷了,本質(zhì)上仍熱是消息的生產(chǎn)和消費(fèi),只不過這種模式更像于發(fā)布和訂閱,因此得名發(fā)布訂閱模式。

描述:

在 RabbitMQ 的消息發(fā)送模式中,發(fā)布訂閱模式對(duì)應(yīng)的只有一種實(shí)際的業(yè)務(wù)場(chǎng)景,我們把他稱為群發(fā)模式。

如上圖所示,此場(chǎng)景是發(fā)布訂閱模式中的一種,但是這種模式?jīng)]有任何存在意義,因?yàn)樵谶@種模式下,生產(chǎn)者生產(chǎn)出一條消息之后,將消息直接發(fā)送到了交換機(jī)上,之后的流程就沒有了。

大家注意看,此時(shí)的交換機(jī)上沒有綁定任何消息隊(duì)列,所以,此時(shí)位于交換機(jī)上的消息將丟失,消費(fèi)者無法拿到消息進(jìn)行消費(fèi)。這種模式場(chǎng)景并沒有任何實(shí)際意義,因?yàn)槲覀兩a(chǎn)的消息無法被消費(fèi)掉,我們的業(yè)務(wù)流程也就不能正常流轉(zhuǎn)。

接下來讓我們看看具有實(shí)際意義的發(fā)布訂閱模式:

生產(chǎn)者生產(chǎn)一條消息后,將消息首先發(fā)送到交換機(jī)上,交換機(jī)進(jìn)行檢測(cè),發(fā)現(xiàn)存在兩個(gè)隊(duì)列都綁定在自身上面,于是,將消息全部投遞到所綁定的隊(duì)列上面,最后再由消費(fèi)者接收消息并消費(fèi)。

發(fā)布訂閱模式的特點(diǎn),就是一個(gè)生產(chǎn)者、一個(gè)交換機(jī)、多個(gè)隊(duì)列、多個(gè)消費(fèi)者, 由于生產(chǎn)者生產(chǎn)出來的消息會(huì)發(fā)送到綁定在交換機(jī)上的所有隊(duì)列上,這種場(chǎng)景很類似于我們給很多人群發(fā)消息,所以,這種模式被叫做群發(fā)模式。

3 發(fā)布訂閱模式代碼實(shí)操

3.1 第一種業(yè)務(wù)場(chǎng)景

在上述發(fā)布訂閱消息發(fā)送模式中,我們介紹了發(fā)布訂閱模式的基礎(chǔ)概念,同時(shí),引入了兩種發(fā)布訂閱模式的業(yè)務(wù)場(chǎng)景,并且對(duì)不同的業(yè)務(wù)場(chǎng)景做了基本的介紹,下面讓我們來看一下如何使用代碼來實(shí)現(xiàn)這兩種不同的業(yè)務(wù)場(chǎng)景。

實(shí)現(xiàn)代碼:

// 發(fā)布訂閱模式-第一種業(yè)務(wù)場(chǎng)景
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.exchangeDeclare(EXCHANGE_NAME, "fanout");
channel.close();
connection.close();

代碼解釋:

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

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

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

第 8 行,我們使用了 channel 通道中的 exchangeDeclare 方法,來為我們的 channel 通道綁定了一個(gè) exchange 交換機(jī)。

由于在第一種業(yè)務(wù)場(chǎng)景中,我們不會(huì)在 exchange 交換機(jī)上綁定任何的消息隊(duì)列,所以在上述代碼中,我們看不到 channel 通道與 queue 消息隊(duì)列進(jìn)行綁定的方法。

在此種業(yè)務(wù)場(chǎng)景下,當(dāng)生產(chǎn)者生產(chǎn)出來消息之后,在將消息發(fā)布到我們的 exchange 交換機(jī)上,整個(gè)流程就結(jié)束了,沒有消費(fèi)者可以拿到這一消息,所以,這種業(yè)務(wù)場(chǎng)景毫無意義。

最后,讓我們來看第二種業(yè)務(wù)場(chǎng)景。

3.2 第二種業(yè)務(wù)場(chǎng)景

我們來看主體模式的代碼實(shí)現(xiàn):

實(shí)現(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.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
channel.basicConsume(QUEUE_NAME, false, consumer);
channel.close();
connection.close();

代碼解釋:

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

第 8 行,我們使用 channel 的 queueBind 方法來將消息隊(duì)列和通道進(jìn)行綁定,這里注意,我們并沒有為我們的消息隊(duì)列指定一個(gè) Routing Key 值,如果這里指定了,就不是發(fā)布訂閱模式了。

第 9 行,我們使用 channel 的 basicConsume 方法,來獲取我們的消息,并對(duì)消息進(jìn)行一個(gè)消費(fèi)。

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

通過上述代碼段,我們可以看到,我們?cè)?channel 通道上,綁定了一個(gè)消息隊(duì)列,這樣我們的消息就可以被消費(fèi)者進(jìn)行消費(fèi)了。

Tips:
1. 我們?cè)趯?shí)現(xiàn)發(fā)布訂閱模式的時(shí)候,在生產(chǎn)者端,我們需要將 exchange 交換機(jī)的類型,聲明為 fanout 類型,這種類型才是我們說的發(fā)布訂閱模式;
2. 發(fā)布訂閱模式更多的應(yīng)用場(chǎng)景,是用在消息通知群發(fā)、批量傳送數(shù)據(jù)等業(yè)務(wù)場(chǎng)景,消息傳送效率還是很高的。

4. 小結(jié)

本小節(jié)為同學(xué)們?cè)敿?xì)介紹了 RabbitMQ 消息發(fā)送模式之發(fā)布訂閱模式的代碼實(shí)操等內(nèi)容,包括發(fā)布訂閱模式的基礎(chǔ)概念等內(nèi)容的回顧,以及發(fā)布訂閱模式常見的兩種業(yè)務(wù)場(chǎng)景的代碼實(shí)現(xiàn),兩種業(yè)務(wù)場(chǎng)景的不同之處及使用場(chǎng)景等內(nèi)容,同學(xué)們需要理清代碼實(shí)現(xiàn)的思路和步驟。