消息适配器应用实操
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 消息适配器。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。