昨天介紹了 RabbitMQ的基本概念以及幾種應用模式,如果想要於 Spring Boot 中使用 RabbitMQ 並實作 RabbitMQ 中的幾種應用模式,需先完成以下配置:
Step 1. 於 pom.xml 內加入 RabbitMQ 的依賴項目
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version><!-- 請自行選擇適用版本 --></version>
</dependency>
Spring AMQP 是由 Spring 框架提供的一個項目,用於基於AMQP的訊息傳遞方案的開發。Spring AMQP 中提供了一個模組,幫助開發人員更輕鬆的實現訊息的發送、接收等行為。
Step 2. 於 application.properties 內設定 RabbitMQ Server 的連接方式
spring.rabbitmq.host = localhost
spring.rabbitmq.port = 5672
spring.rabbitmq.username = guest
spring.rabbitmq.password = guest
在 Spring Boot 專案中連接 RabbitMQ Server 時使用的 port 為 5672(這是AMQP默認的通訊埠號)。
Step 3. 建立一個RabbitMQ相關設定的類別
@Configuration
public class RabbitmqConfig {
private final static String QUEUE_NAME = "testQueue";
@Bean
public Queue testQueue(){
return new Queue(QUEUE_NAME);
}
}
@Configuration
註解用於標註此類別為Spring的配置類,裡面包含一個或多個使用@Bean
註解的方法,用於定義指定的訊息佇列(Queue)、交換器(Exchange),並將他們納入Spring IoC 容器內進行管理。
實作範例
在完成一系列設定後,先建立一個發送訊息的類別如下:
@Component
public class Sender {
@Autowired
private RabbitTemplate rabbitmqTemplate;
public void sendQueue(String message) {
rabbitmqTemplate.convertAndSend("testQueue", message);
}
}
RabbitTemplate
類別內提供了許多的方法用來發送和接收訊息,例如範例中的 convertAndSend
方法就是負責發送訊息的方法。
接著我們可以在 @Server
類別下建立一個監聽訊息的方法如下:
@RabbitListener(queues = "testQueue")
public void processMessage(String message) {
logger.info("Get a message !!");
System.out.println(" [X] Received '" + message + "'");
}
@RabbitListener
是一個用於監聽指定Queue的註解,當收到訊息(message)時,會主動呼叫方法處理收到的訊息。
可以寫一個簡單的測試類用於測試訊息的發送和接收,測試程式如下:
@SpringBootTest
@ExtendWith(MockitoExtension.class)
class RabbitmqTest {
@Autowired
private Sender sender;
@Test
public void simpleTest(){
sender.sendQueue("Hello World !!");
}
}