ActiveMQ是一个非常流行的消息队列服务中间件,基于JMS(Java Message Service)规范,并且它是一个纯Java程序,运行环境只需要Java虚拟机。Spring集成ActiveMQ只需简单配置,本文进一步分享封装的ActiveMqService服务。
代码文件 |
功能要点 |
|
SpringBoot集成ActiveMQ |
pom.xml |
引入ActiveMQ依赖:spring-boot-starter-activemq |
application.yml |
配置ActiveMQ服务器:broker-url, user, passworkd |
|
ActiveMqConfig.java |
配置Bean: ActiveMQQueue, ActiveMQTopic, 还有JmsListenerContainerFactory |
|
封装ActiveMQ服务 |
ActiveMqService.java |
调用ActiveMQ发送消息:JmsMessagingTemplate.convertAndSend()发送Queue和Topic |
接收处理消息 |
ActiveMqConsumer.java |
接收ActiveMQ消息,@JmsListener()声明处理函数 |
单元测试 |
ActiveMqServiceTest.java |
测试封装的ActiveMQ发送接收功能 |
功能调用 |
CheckController.java |
增加REST接口/chk/mq,调用ActiveMQ发送消息 |
l 代码
Github下载:https://github.com/jextop/StarterApi/
l SpringBoot集成ActiveMQ
1. 新建SpringBoot项目时,选中ActiveMQ,将自动添加ActiveMQ依赖。
2. 已有SpringBoot项目,可以在pom.xml中直接引用ActiveMQ Starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
3. 在application.yml中配置ActiveMQ服务器信息:
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
in-memory: false
packages:
trust-all: true
pool:
enabled: false
l 调用ActiveMQ发送消息,封装服务ActiveMqService.java
1. JmsMessagingTemplate发送消息
a) send()
b) convertAndSend()
c) sendAndReceive(),发送并且等待回复
d) receive(),等待回复
2. Queue发送点对点消息
3. Topic发送订阅消息
l 接收处理ActiveMQ消息,ActiveMqConsumer.java
@JmsListener()声明处理函数
@Component
public class ActiveMqConsumer {
@JmsListener(destination = "starter.queue")
public void listenQueue(String msg) {
LogUtil.info("Receive queue msg", msg); }
@JmsListener(destination = "starter.topic", containerFactory = "jmsTopicListenerContainerFactory")
public void listenTopic(String msg) {
LogUtil.info("Receive topic msg", msg);
}
}
l 单元测试ActiveMqServiceTest.java
@SpringBootTest
public class ActiveMqServiceTest {
@Autowired
ActiveMqService activeMqService;
@Test
public void testSendQueue() {
activeMqService.sendQueue(String.format("test active queue: %s", new Date().toString()));
}
@Test
public void testSendTopic() {
activeMqService.sendTopic(String.format("test active topic: %s", new Date().toString()));
}
}
l 功能调用
1. 增加RestController:CheckController.java
2. 增加REST接口/chk/mq,调用ActiveMQ发送消息
@GetMapping(path = "/chk/mq")
public Object mq(@RequestAttribute(required = false) String ip) {
String msg = String.format("check mq, %s, %s 消息队列", ip, new Date().toString());
activeMqService.send(msg);
return new HashMap<String, Object>() {{
put("chk", "mq");
put("msg", msg);
}};
}
l REST接口调用ActiveMqService示例