您的位置:首页技术文章
文章详情页

Spring Boot基于Active MQ实现整合JMS

【字号: 日期:2023-08-30 10:40:22浏览:2作者:猪猪

我们使用jms一般是使用spring-jms和activemq相结合,通过spring Boot为我们配置好的JmsTemplate发送消息到指定的目的地Destination。本文以点到点消息模式为例,演示如何在Spring Boot中整合 JMS 和 Active MQ ,实现 MQ 消息的生产与消费。

点到点消息模式定义:当消息发送者发送消息,消息代理获得消息后,把消息放入一个队列里,当有消息接收者来接收消息的时候,消息将从队列里取出并且传递给接收者,这时候队列里就没有此消息了。队列Queue的存在使得消息的异步传输成为可能。

Spring Boot基于Active MQ实现整合JMS

1 安装ActiveMQ

关于具体的安装步骤,请参考专门介绍安装与部署的另一篇博文《ActiveMQ安装及部署教程图解》。

2 配置Active MQ 依赖

关于如何搭建 Spring Boot工程,请移步《如何使用intellij IDEA搭建Spring Boot项目》。假设项目已经创建完毕,在项目 pom 文件中加入Active MQ依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> <version>2.2.7.RELEASE</version></dependency>

3 修改application.properties配置文件

在application.properties中配置Active MQ:

spring.activemq.broker-url=tcp://localhost:61616spring.activemq.in-memory=truespring.activemq.pool.enabled=false#默认值false,表示点到点模式,true时代表发布订阅模式spring.jms.pub-sub-domain=false

4 创建消息生产者和消费者

本文以点到点消息模式演示。新增消息生产者:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsMessagingTemplate;import org.springframework.stereotype.Service;import javax.jms.Destination;@Service('producer')public class Producer { /** * 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装 */ @Autowired private JmsMessagingTemplate jmsTemplate; /** * 发送消息,destination是发送到的队列,message是待发送的消息 * * @param destination * @param message */ public void sendMessage(Destination destination, final String message) { jmsTemplate.convertAndSend(destination, message); }}

通过JmsMessagingTemplate 的convertAndSend方法向目的地 destination发送消息。 新增消息监听者:

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.jms.annotation.JmsListener;import org.springframework.stereotype.Component;@Componentpublic class ConsumerListener { private static Logger logger = LoggerFactory.getLogger(Consumer.class); /** * 使用JmsListener配置消费者监听的队列 * @param receivedMsg 接收到的消息 */ @JmsListener(destination = 'myDest.queue') public void receiveQueue(String receivedMsg) { logger.info('Consumer收到的报文为: {}', receivedMsg); }}

@JmsListener是Spring 4.1 提供的一个新特性,用于简化JMS开发,只需使用此注解的属性destination指定要监听的目的地【myDest.queue】,即可接收该目的地发送的消息。消费者2 ConsumerListener2 的代码同上,但是日志如下:

logger.info('Consumer2收到的报文为: {}', receivedMsg);

温馨提示,消息消费者和生产者的类上必须加上注解 @Component 或者 @Service,使得消息消费者类就会被委派给Listener类,原理类似于使用SessionAwareMessageListener以及MessageListenerAdapter来实现消息驱动POJO。

5 测试 MQ

在Junit测试类中新增测试方法

import org.apache.activemq.command.ActiveMQQueue;import javax.jms.Destination;@Autowiredprivate Producer producer;@Testpublic void jmsActiveMqTest() throws InterruptedException { Destination destination = new ActiveMQQueue('myDest.queue'); for (int i = 0; i < 21; i++) { producer.sendMessage(destination, String.format('My name is Wiener%s', i)); }}

控制台显示消费者接收到的消息如下:

Consumer收到的报文为: My name is Wiener0Consumer2 收到的报文为:My name is Wiener1Consumer收到的报文为: My name is Wiener2Consumer2 收到的报文为:My name is Wiener3Consumer收到的报文为: My name is Wiener4Consumer2 收到的报文为:My name is Wiener5Consumer收到的报文为: My name is Wiener6Consumer2 收到的报文为:My name is Wiener7...

经过上面的五个步骤,spring Boot、Jms 和 Active MQ 就基本上整合完成了,是不是使用起来很方便了!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。

标签: Spring
相关文章: