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=192.168.16.128
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);
}
}
測試
第四步測試。為了方便,寫一個測試類生產消息。然后啟動工程,運行測試類,使生產者發送消息,不出意外消費者將會消費消息,在控制台輸出信息。
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
Producer producer;
@Test
public void contextLoads() {
producer.produce();
}
}
操作之后可以在測試控制台看到生產者消息發送成功,在該工程的控制台看到消息消費成功。
訪問RabbitMQ控制面板也會看到有消息。
總結
Spring Boot極大的簡化各種組件的使用,在實際應用中,當一個服務處理完成之后可以將消息放進RabbitMQ消息隊列,另外一個服務從隊列中取消息進行消費,這樣可以降低服務之間的耦合,實現一些異步的操作。本文僅作為一個簡單demo供參考。