Spring Boot学习笔记——Spring Boot与ActiveMQ的集成
Spring Boot对JMS(Java Message Service,Java消息服务)也提供了自动配置的支持,其主要支持的JMS实现有ActiveMQ、Artemis等。这里以ActiveMQ为例。
一、使用内嵌的ActiveMQ
1.添加ActiveMQ起步依赖
在项目的pom.xml中添加ActiveMQ的依赖信息:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> <version>2.0.2.RELEASE</version> </dependency>
或者:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency>
因为我的项目用的就是2.0.2.RELEASE
版本,所以可以省略version信息。
添加完spring-boot-starter-activemq依赖后,项目会自动地将ActiveMQ运行所需的JAR包加载到项目中,此时就可以在项目中使用ActiveMQ了。
2.创建消息队列对象
在DemoApplication.java中编写一个创建消息队列的方法:
DemoApplication.java:
package com.zifeiy.demo; import javax.jms.Queue; import org.apache.activemq.command.ActiveMQQueue; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; @SpringBootApplication @EnableCaching public class DemoApplication { @Bean public Queue queue() { return new ActiveMQQueue("active.queue"); } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
在上述代码中,@Bean注解用于定义一个Bean。
3.创建消息生产者
创建一个队列消息的控制器类QueueController,并在类中编写发送消息的方法:
QueueController.java:
package com.zifeiy.demo.controller; import javax.jms.Queue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /* * 队列消息控制器 */ @RestController public class QueueController { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private Queue queue; /* * 消息生产者 */ @RequestMapping("/send") public void send() { // 指定消息发送的目的地及内容 this.jmsMessagingTemplate.convertAndSend(this.queue, "新发送的消息!"); } }
在上述代码中,send()方法通过jmsMessageTemplate的convertAndSend()方法指定了消息发送的目的地为Queue对象,所发送的内容为“新发送的消息!”。
4.创建消息监听者
创建一个客户控制器类CustomerController,并在类型编写监听和读取消息的方法:
CustomerController.java:
package com.zifeiy.demo.controller; import org.springframework.jms.annotation.JmsListener; import org.springframework.web.bind.annotation.RestController; /* * 客户控制器 */ @RestController public class CustomerController { /* * 监听和读取消息 */ @JmsListener(destination="active.queue") public void readActiveQueue(String message) { System.out.println("接受到:" + message); } }
5.启动项目,测试应用
启动Spring Boot项目,在浏览器中输入地址http://localhost:8080/send
后,Eclipse控制台将现实接受到的信息如下:
接受到:新发送的消息!
二、使用外部的ActiveMQ
修改配置文件,添加如下:
spring.activemq.broker-url=tcp://192.168.2.100:61616
在上述配置中,192.168.2.100是远程主机的IP地址,61616是ActiveMQ的服务端口号。
可登陆远程主机的8161端口访问ActiveMQ的管理界面。