亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

RabbitMQ 入門教程

RabbitMQ 簡介
RabbitMQ 簡介

消息適配器應用實操

1. 前言

Hello,大家好。本小節會繼續為同學們介紹 MessageListenerAdapter 消息適配器的相關使用。

在上一節中,我們介紹了 MessageListenerAdapter 消息適配器的基礎概念和基礎使用方法,這些是了解 MessageListenerAdapter 的前提,我們只有對這些基礎知識了解之后,我們才能掌握 MessageListenerAdapter 消息適配器的基本使用。

話不多說,讓我們直入正題吧。

本節主要內容:

  • MessageListenerAdapter 常用方法概述;

  • MessageListenerAdapter 基本使用流程。

2. MessageListenerAdapter 常用方法概述

我們在上一節中,對 MessageListenerAdapter 消息適配器的方法有了簡單的了解,下面我來就看一下在 MessageListenerAdapter 中,都有哪些常用的方法吧。

方法名稱:

setDefaultListenerMethod()

方法作用:

指定 MessageListenerAdapter 消息適配器中的默認的監聽消息的方法的名稱。

方法名稱:

setMessageConverter()

方法作用:

指定 MessageListenerAdapter 消息適配器中對應消息監聽方法的 Converter 方法參數轉換器。

setDefaultListenerMethod 方法和 setMessageConverter 方法是 MessageListenerAdapter 消息適配器中常用的兩個方法,也是使用頻率比較高的兩個方法,基本上只要使用 MessageListenerAdapter 消息適配器,就需要使用上述這兩個方法。

在介紹完常用的兩個方法之后,我們重點來看一下 MessageListenerAdapter 消息適配器的基本使用流程。

3. MessageListenerAdapter 基本使用流程

我們知道,在 RabbitMQ 中是存在生產者和消費者的,即生產者生產出來一條消息投放到 RabbitMQ 中,并最終被消費者所消費,在這一過程中,在生產者將消息投放到 RabbitMQ 中時,以及在消費者消費消息時,都可能要對消息進行監聽處理。

我們的 MessageListenerAdapter 則是在生產者將消息投放到 RabbitMQ 中時進行監聽, 而這個監聽過程是有一定的監聽步驟的,下面就讓我們來看一下 MessageListenerAdapter 是如何監聽消息被投放到 RabbitMQ 中的。

3.1 配置消息適配器基本骨架

在上節中,我們已經將使用 MessageListenerAdapter 消息適配器所需的依賴引入了進來,所以這里不再贅述,我們直接來看如何配置 MessageListenerAdapter 基本骨架。

配置 MessageListenerAdapter 基本骨架的代碼如下所示:

MessageListenerAdapter adapter = new MessageListenerAdapter(new MessageAdapter());

container.setMessageListener(adapter);
return container;

代碼解釋:

第 1-2 行,是對 MessageListenerAdapter 進行初始化,上節已經介紹過,這里不再贅述。

第 4 行,我們將初始化好的 adapter 通過 container 的 setMessageListener 方法,設置到我們的 container 容器中,至于這里的 container 指的是什么,同學們可以回顧之前小節的內容,這里也不再介紹了。

第 5 行,我們將設置好的 container 容器進行返回。

通過上述代碼段,我們就已經搭建好了使用 MessageListenerAdapter 消息適配器的基本骨架,剩下的就是在骨架中填充內容了。

3.2 填充消息適配器

在上述內容中,我們已經對常用的兩個方法所有了解了,但是只是了解到這種程度是不夠的,下面將會詳細介紹這兩個常用的方法,即我們會通過這兩個常用的方法來填充 MessageListenerAdapter 消息適配器的骨架,使之具備處理相應業務邏輯的能力。

3.2.1 設置 MessageListenerAdapter 默認監聽方法

無論我們使用哪種消息監聽方式,都需要配置一個或多個對應的消息監聽處理方法,使用 MessageListenerAdapter 消息適配器也是如此,只不過配置方法有些差別。

我們在配置消息監聽處理方法時,MessageListenerAdapter 會要求我們自定義一個適配器的實現, 也就是上述代碼段中的 new MessageAdapter() 中的 MessageAdapter 類,這個類就是我們自定義的適配器的實現,在該類中,我們可以聲明我們的消息監聽處理方法,而這個方法根據 MessageListenerAdapter 消息適配器,是需要我們設置默認方法名稱的。

這個默認的方法名稱就是 handleMessage , 這個在 RabbitMQ 官方文檔,或者 MessageListenerAdapter 源碼實現中都有提到,感興趣的同學可以自行查閱。

handleMessage 這個名稱是默認的消息監聽處理方法的名稱,但是在實際的工作中,我們更多的是需要自定義屬于某一業務的具體的消息監聽處理方法,例如 registerHandleMessage 等等,那這種情況我們又該如何設置呢?

這就需要用到我們的 setDefaultListenerMethod 方法了,如下代碼所示:

代碼實現:

MessageListenerAdapter adapter = new MessageListenerAdapter(new MessageAdapter());

adapter.setDefaultListenerMethod("registerHandleMessage");

container.setMessageListener(adapter);
return container;

代碼解釋:

配置 MessageListenerAdapter 骨架的代碼就不介紹了,我們直接來看第 4 行代碼。

第 4 行,我們使用 adapter 的 setDefaultListenerMethod 方法來將我們自定義的 registerHandleMessage 消息監聽處理方法的方法名稱進行設置,從而允許我們的 MessageListenerAdapter 消息適配器可以使用自定義的消息監聽處理方法的方法名稱。

3.2.2 設置 MessageListenerAdapter 自定義消息接收參數類型

我們都知道,RabbitMQ 中的消息是由消息參數和消息體所組成的,且消息的返回格式是 byte 類型的數組, 這就要求我們,如果想接收這一消息,所接收消息的方法中的參數類型一定要聲明為 byte 數組類型才可以,但是在有些業務場景中,則是需要用字符串的方式去接收,這又該如何實現呢?

要實現這一需求,我們就需要使用 setMessageConverter 方法,來將 byte 數組類型的參數轉換為我們所需要的消息參數類型,如下代碼所示:

MessageListenerAdapter adapter = new MessageListenerAdapter(new MessageAdapter());

adapter.setMessageConverter(new StringMessageConverter());

container.setMessageListener(adapter);
return container;

代碼解釋:

配置 MessageListenerAdapter 骨架的代碼不再贅述,我們直接來看第 4 行代碼。

第 4 行,我們使用 adapter 的 setMessageListener 方法來將我們自定義的 StringMessageConverter 轉換器傳入到 MessageListenerAdapter 消息適配器中,來讓 MessageListenerAdapter 消息適配器具備以字符串的方式來接收 RabbitMQ 中消息的能力。

對應的 StringMessageConverter 中的核心代碼如下所示:

public class StringMessageConverter implements MessageConverter {
  @Override
  public Message toMessage(Object object, MessageProperties messageProperties) throws MessageConversionException {
    return new Message(object.toString().getBytes(), messageProperties);
  }

   @Override
  public Message fromMessage(Message message) throws MessageConversionException {
    // 一些邏輯處理
  }
}

代碼解釋:

第 1-2 行,我們聲明了一個名為 StringMessageConverter 的類,并且實現了 MessageConverter 接口,重寫了接口中對應的兩個方法。

第 7 行,在 toMessage 方法中,我們對方法的返回值進行了處理,即該方法返回了一個 Message 實例,在這個 Message 實例的構造方法中,我們對接收消息的 object 參數進行了轉換為字符串形式的處理,這樣就使得MessageListenerAdapter 消息適配器具備了以字符串的方式來接收 RabbitMQ 中消息的能力。

至于其他的代碼,不是我們本節所要考慮的內容,所以這里就不再介紹了,感興趣的同學可以自行了解。

Tips: 1. MessageListenerAdapter 消息適配器的基本使用流程,就是配置出 MessageListenerAdapter 的基本骨架,然后根據實際的業務需求,來填充這個骨架的內容;
2. 我們只是介紹了兩個常用的方法,在 MessageListenerAdapter 中還存在其他的方法,只不過使用的頻率不是很高,如有需要同學們可自行了解。

4. 小結

本小節為同學們詳細介紹了 MessageListenerAdapter 消息適配器的基本使用流程,包括如何配置 MessageListenerAdapter 消息適配器的基本骨架,如何填充 MessageListenerAdapter 消息適配器的骨架內容,從而滿足實際的業務需要。旨在幫助各位同學可以對 MessageListenerAdapter 消息適配器的基本使用流程有一個簡單的了解和思路,這樣在實際的項目開發中才能用好 MessageListenerAdapter 消息適配器。