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

全部開(kāi)發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡(jiǎn)介
RabbitMQ 簡(jiǎn)介
首頁(yè) 慕課教程 RabbitMQ 入門教程 RabbitMQ 入門教程 RabbitTemplate基礎(chǔ)概念詳解與配置

RabbitTemplate 基礎(chǔ)概念詳解與配置

1. 前言

Hello,大家好。本小節(jié)會(huì)為同學(xué)們介紹 RabbitMQ 在 Spring 生態(tài)中的第二個(gè)核心組件,也就是 RabbitTemplate ,RabbitTemplate 作為 Spring 生態(tài)中的第二個(gè)核心組件,其在整個(gè) RabbitMQ 中也扮演著重要的角色。

本小節(jié)首先會(huì)為各位同學(xué)介紹,什么是 RabbitTemplate ,即 RabbitTemplate 的基礎(chǔ)概念,以及 RabbitTemplate 所發(fā)揮的作用,最后要給各位同學(xué)介紹 RabbitTemplate 的基本使用方法,即 RabbitTemplate 的基礎(chǔ)配置。RabbitTemplate 的基礎(chǔ)概念和基本使用都需我們同學(xué)有所了解和掌握。

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

  • RabbitTemplate 基礎(chǔ)概念概述;

  • RabbitTemplate 基礎(chǔ)配置概述。

2. RabbitTemplate 基礎(chǔ)概念概述

基礎(chǔ)概念:

在上一節(jié)中,我們接觸了 RabbitMQ 在 Spring 生態(tài)中的第一個(gè)核心組件-RabbitAdmin ,了解了 RabbitAdmin 的基礎(chǔ)概念和基本使用方法,知道了如何使用 RabbitAdmin 來(lái)配置客戶端,也就是我們的應(yīng)用程序連接 RabbitMQ Server 的配置方法,其實(shí) RabbitAdmin 的主要目的就是與 RabbitMQ Server 建立連接,并聲明 RabbitMQ 的核心元素。

在對(duì) RabbitAdmin 有所了解之后,我們只是與 RabbitMQ Server 建立了一個(gè)可用的連接,并根據(jù)需求聲明了 RabbitMQ 中的交換機(jī)、消息隊(duì)列,以及綁定關(guān)系,此時(shí),還并沒(méi)有向 RabbitMQ Server 發(fā)送任何消息,我們的應(yīng)用數(shù)據(jù)還不能被 RabbitMQ Server 處理,那么我們應(yīng)該怎樣在 Spring 中向 RabbitMQ Server 發(fā)送消息呢?

要想在 Spring 中向 RabbitMQ Server 發(fā)送消息,我們需要使用 RabbitTemplate 才行。 RabbitTemplate 是 Spring-AMQP 依賴為我們提供的一種 RabbitMQ 消息模板,它像 RabbitAdmin 一樣,與 RabbitMQ Server 建立了一種映射關(guān)系,我們只需要使用 Java 代碼來(lái)對(duì) RabbitTemplate 進(jìn)行配置,就可以將我們應(yīng)用程序中的數(shù)據(jù)發(fā)送到 RabbitMQ Server 中。

RabbitTemplate 提供了編輯消息、發(fā)送消息、發(fā)送消息前的監(jiān)聽(tīng)、發(fā)送消息后的監(jiān)聽(tīng)等消息制造和消息監(jiān)聽(tīng)功能,可以讓我們像操作原生 RabbitMQ API 那樣在 Spring 中通過(guò) RabbitTemplate 來(lái)操作消息并發(fā)送和監(jiān)聽(tīng)消息,這就是 RabbitTemplate 的作用之處。

我們可以通俗的來(lái)這樣理解 RabbitTemplate ,對(duì)于 RabbitAdmin 而言,RabbitAdmin 是將應(yīng)用程序和 RabbitMQ Server 建立鏈接的,而 RabbitTemplate 則是在建立連接之后,將我們應(yīng)用程序中的數(shù)據(jù)發(fā)送到 RabbitMQ Server 中的。

在介紹完 RabbitTemplate 基礎(chǔ)概念之后,下面讓我們來(lái)看一下如何對(duì) RabbitTemplate 進(jìn)行配置吧。

3. RabbitTemplate 基礎(chǔ)配置概述

對(duì) RabbitTemplate 進(jìn)行配置,和 RabbitAdmin 的配置步驟相似,都需要首先引入 Spring-AMQP 的依賴,就是我們上節(jié)中所述的如下兩個(gè)依賴:

3.1 引入 RabbitTemplate

以 Maven 引入方式為例,引入代碼如下所示:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>3.6.5</version>
</dependency>

和 RabbitAdmin 相同,在將這兩個(gè)依賴進(jìn)行引入之后,我們就可以對(duì) RabbitTemplate 進(jìn)行配置了。

3.2 RabbitTemplate 基礎(chǔ)配置

初始化 RabbitTemplate 消息模板

在使用 RabbitTemplate 消息模板來(lái)往 RabbitMQ Server 中發(fā)送消息之前,我們需要先對(duì) RabbitTemplate 消息模板進(jìn)行初始化,這個(gè)初始化過(guò)程非常簡(jiǎn)單,初始化 RabbitTemplate 消息模板的代碼如下所示:

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

@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
  return rabbitTemplate;
}

代碼解釋:

第 1 行,我們使用 Spring 的 Bean 注解將我們聲明的 rabbitTemplate 方法注入到 Spring 容器中,這樣 Spring 容器就可以監(jiān)聽(tīng)到我們注入的配置。

第 2 行,我們使用 Spring-AMQP 中的 RabbitTemplate 類,來(lái)聲明了一個(gè)名為 rabbitTemplate 的方法,用來(lái)對(duì) RabbitTemplate 消息模板進(jìn)行初始化。

第 3 行,我們實(shí)例化了一個(gè) rabbitTemplate 實(shí)例,該實(shí)例是 Spring-AMQP 中對(duì) RabbitTemplate 消息模板進(jìn)行初始化的實(shí)例,要想使用 RabbitTemplate 發(fā)送消息,就必須要初始化該實(shí)例。

第 4 行,我們將初始化好的 rabbitTemplate 實(shí)例進(jìn)行返回。

Tips: 1. @Bean 注解是 Spring 容器中自帶的注解,其作用就是將我們應(yīng)用程序中的類,或者方法來(lái)注入到 Spring 容器中,作為 Spring 配置的一部分。
2. RabbitTemplate 實(shí)例接收我們所定義的 ConnectionFactory 連接,傳入的連接名稱應(yīng)該和我們定義的 connectionFactory 名稱保持一致,即與使用 Bean 注解來(lái)聲明的連接名稱保持一致,如果名稱不保持一致,則 RabbitTemplate 就不會(huì)初始化,且會(huì)拋出異常。

RabbitTemplate 核心 API 介紹

下面我們來(lái)看一下在 RabbitTemplate 中,都有哪些核心的 API 。

MessageProperties 實(shí)例,用于對(duì)消息的 properties 參數(shù)進(jìn)行描述;

Message 實(shí)例,用于對(duì)消息體進(jìn)行描述;

send() 方法,用于將原始消息發(fā)送到 RabbitMQ Server 中;

convertAndSend() 方法,用于將原始消息進(jìn)行轉(zhuǎn)換,并且將轉(zhuǎn)換過(guò)后的消息發(fā)送到 RabbitMQ Server 中;

addListener() 方法,用于為當(dāng)前消息模板設(shè)置消息監(jiān)聽(tīng)類型。

在介紹完常用核心 API 之后,接下來(lái)我們用一個(gè)發(fā)送消息的例子,來(lái)詳細(xì)說(shuō)明一下這下常用核心 API ,如下代碼所示:

@Autowired
private RabbitTemplate rabbitTemplate;
MessageProperties messageProperties = new MessageProperties();
messageProperties.getHeaders().put("test1", "test1");
messageProperties.getHeaders().put("test2", "test2");
Message message = new Message("Hello RabbitTemplate".getBytes(), messageProperties);
rabbitTemplate.convertAndSend("test_direct_001", "test.123", message, new MessagePostProcessor() {
  @Override
  public Message postProcessMessage(Message message) throws AmqpException {
  message.getMessageProperties().getHeaders().put("test1", "test111");
  message.getMessageProperties().getHeaders().put("test2", "test222");
  return message;
  }
});

代碼解釋:

第 1-2 行,我們使用 Autowired 注解,來(lái)將 RabbitTemplate 注入進(jìn)來(lái),并用一個(gè)私有變量 rabbitTemplate 來(lái)接收。

第 3 行,我們實(shí)例化了一個(gè) MessageProperties 的實(shí)例 messageProperties 。

第 4-5 行,我們使用 messageProperties 實(shí)例的 getHeaders 方法獲取到消息的 headers 參數(shù),并分別 put 了兩個(gè)不同的 header 。

第 6 行,我們初始化了一個(gè) Message 消息實(shí)例 message ,并在構(gòu)造方法中設(shè)置了消息體的內(nèi)容為 Hello RabbitTemplate ,且將該消息的額外參數(shù) messageProperties 也一并進(jìn)行了設(shè)置。

第 7-14 行,我們使用 rabbitTemplate 的 convertAndSend 方法,將消息進(jìn)行轉(zhuǎn)換之后發(fā)送到了 RabbitMQ Server 中, 其中,convertAndSend 方法的第一個(gè)參數(shù)為要使用的交換機(jī)名稱,這里是 test_direct_001 ,第二個(gè)參數(shù)為 routingKey ,這里是 test.123 ,第三個(gè)參數(shù)是我們需要發(fā)送的消息 message ,第四個(gè)參數(shù)則是消息發(fā)送成功后的監(jiān)聽(tīng)器。

對(duì)于這個(gè)監(jiān)聽(tīng)器,這里采用了 new MessagePostProcessor 的匿名內(nèi)部類的形式進(jìn)行實(shí)現(xiàn),要添加 MessagePostProcessor 消息監(jiān)聽(tīng)器,需要重寫 postProcessMessage 方法,即消息發(fā)送成功后的方法,在該方法中,我們可以對(duì)消息發(fā)送成功后進(jìn)行進(jìn)一步的設(shè)置,最后將設(shè)置好的 Message 進(jìn)行返回。

關(guān)于 send 方法和 addListener 方法,如下代碼所示:

rabbitTemplate.send("test_direct_001", "test.123", message);
// 省略對(duì) channel 的配置
rabbitTemplate.addListener(channel);

代碼解釋:

第 1 行,我們使用 rabbitTemplate 的 send 方法向 RabbitMQ Server 中發(fā)送了一條消息,其中,send 方法的第一個(gè)參數(shù)為綁定的交換機(jī),這里是 test_direct_001 ,第二個(gè)參數(shù)為 routingKey ,這里是 test.123,第三個(gè)參數(shù)為我們要發(fā)送的消息 message 。

第 3 行,我們使用 rabbitTemplate 的 addListener 方法,為當(dāng)前的消息模板添加了消息監(jiān)聽(tīng)器,addListener 方法需要傳遞一個(gè) channel ,這個(gè)channel 需要我們事先配置好,就像介紹 Channel 小節(jié)那樣。

Tips: 1. send 方法和 convertAndSend 方法,區(qū)別之處在于,前者不會(huì)對(duì)消息進(jìn)行轉(zhuǎn)換,我們傳遞進(jìn)去的是什么消息,就會(huì)往 RabbitMQ Server 中發(fā)送什么消息;后者則會(huì)將我們傳遞進(jìn)去的消息進(jìn)行轉(zhuǎn)換,具體如何轉(zhuǎn)換的需要我們觀察源碼之后才會(huì)清楚,并將轉(zhuǎn)換過(guò)后的消息發(fā)送到 RabbitMQ Server中;
2. addListener 方法在 RabbitTemplate 中并不是使用頻率最高的,但確是經(jīng)常使用的一種消息監(jiān)聽(tīng)的添加方法,如果我們不能在 convertAndSend 方法中添加消息監(jiān)聽(tīng),才會(huì)考慮使用 addListener 方法。

4. 小結(jié)

本小節(jié)為同學(xué)們介紹了在 Spring 生態(tài)中的 RabbitTemplate 消息模板。RabbitTemplate 作為 Spring-AMQP 中的消息模板,其發(fā)揮著重要的作用,RabbitTemplate 消息模板是連接應(yīng)用程序和 RabbitMQ Server 中間的橋梁,如果我們只配置了 RabbitAdmin ,沒(méi)有配置 RabbitTemplate ,那么我們的消息就無(wú)法發(fā)送到 RabbitMQ Server 中,也就沒(méi)法實(shí)現(xiàn)業(yè)務(wù)的閉環(huán)。

本小節(jié)詳細(xì)介紹了 RabbitTemplate 的基礎(chǔ)概念和作用,以及 RabbitTemplate 的基礎(chǔ)常用核心 API ,以及基礎(chǔ)配置的配置方法,對(duì)于這其中容易出現(xiàn)問(wèn)題的地方也做了提示,旨在幫助同學(xué)們可以對(duì) RabbitTemplate 有一個(gè)基礎(chǔ)的了解,并且要會(huì)使用 RabbitTemplate 進(jìn)行基本的消息發(fā)送和消息監(jiān)聽(tīng)處理。