ActiveMQ是一個很是流行的消息隊列服務中間件,基於JMS(Java Message Service)規範,而且它是一個純Java程序,運行環境只須要Java虛擬機。Spring集成ActiveMQ只需簡單配置,本文進一步分享封裝的ActiveMqService服務。
java
代碼文件git |
功能要點github |
|
SpringBoot集成ActiveMQspring |
pom.xml服務器 |
引入ActiveMQ依賴:spring-boot-starter-activemqapp |
application.ymltcp |
配置ActiveMQ服務器:broker-url, user, passworkdide |
|
ActiveMqConfig.java函數 |
配置Bean: ActiveMQQueue, ActiveMQTopic, 還有JmsListenerContainerFactoryspring-boot |
|
封裝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示例