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的管理界面。