RabbitMQ是目前非常熱門的一款消息中間件,不管是互聯網大廠還是中小企業都在大量使用。Spring Boot的興起,極大地簡化了Spring的開發,本文將使用Spring Boot與RabbitMQ進行簡單整合,實現生產和消費消息。
配置
Spring Boot使用了這麼久,套路差不多摸清楚了。Spring Boot與其他組件進行整合,無非就是加入pom依賴,接着配置一些基本信息,然後就可以使用相關注解進行開發了。
RabbitMQ也是相同的套路,第一步要引入依賴。要引入的依賴比較容易記,RabbitMQ實現了AMQP協議,引入依賴spring-boot-starter-amqp
。
<!-- rabbitmq依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第二步要配置RabbitMQ連接信息,包括主機、端口號、用戶名和密碼。RabbitMQ配置信息:
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
如果沒有安裝RabbitMQ,我推薦使用Docker快速安裝和啓動,啓動命令:
docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.8.0-beta.4-management
實現生產者和消費者
第三步實現生產和消費者。
生產者
生產者用來生產消息並進行發送。需要用到RabbitTemplate
。RabbitTemplate
是發送消息的關鍵類,convertAndSend
方法可以指定消息發送的交換器、路由鍵、消息內容等。
@Component
public class Producer {
@Autowired
RabbitTemplate rabbitTemplate;
public void produce() {
String message = new Date() + "Beijing";
System.out.println("生產者生產消息=====" + message);
rabbitTemplate.convertAndSend("rabbitmq_queue", message);
}
}
消費者
消費者消費生產者發送的消息。實現消費者主要用到註解@RabbitListener
。@RabbitListener
是一個功能強大的註解。這個註解裏面可以註解配置@QueueBinding、@Queue、@Exchange直接通過這個組合註解一次性搞定多個交換機、綁定、路由、並且配置監聽功能等。
- 在RabbitMQ控制面板創建好隊列,使用@RabbitListener監聽隊列。
@RabbitListener(queues = "rabbitmq_queue")
- 使用@RabbitListener自動創建隊列。
@RabbitListener(queuesToDeclare = @Queue("myQueue"))
- 使用@RabbitListener自動創建隊列,並對Exchange和Queue進行綁定。
@RabbitListener(bindings = @QueueBinding(value = @Queue("myQueue"), key = "mobi", exchange = @Exchange("myExchange")))
本文使用@RabbitListener自動創建一個隊列。
@Component
public class Consumer {
@RabbitHandler
@RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue"))
public void process(String message) {
System.out.println("消費者消費消息=====" + message);
}
}
測試
第四步測試。爲了方便,寫一個測試類生產消息。然後啓動工程,運行測試類,使生產者發送消息,不出意外消費者將會消費消息,在控制檯輸出信息。
@SpringBootTest(classes = RabbitMqApplication.class)
class ProducerTest {
@Autowired Producer producer;
@Test
void contextLoads() throws InterruptedException {
producer.produce();
}
}
操作之後可以在測試控制檯看到生產者消息發送成功,在該工程的控制檯看到消息消費成功。
訪問RabbitMQ控制面板也會看到有消息。
擁有一個連接(Connection)
兩個Channel
自定創建一個 Quenues,綁定默認的(AMQP default) 主機
總結
Spring Boot極大的簡化各種組件的使用,在實際應用中,當一個服務處理完成之後可以將消息放進RabbitMQ消息隊列,另外一個服務從隊列中取消息進行消費,這樣可以降低服務之間的耦合,實現一些異步的操作。本文僅作爲一個簡單demo供參考。