springboot整合rabbitMQ的使用
RabbitMQ介紹
RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支援多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支援AJAX。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗。
關於AMQP(摘自網際網路):
AMQP,即Advanced Message Queuing Protocol,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。 AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性、安全。
題外話:其實Redis也有提供佇列功能。但我覺得,redis還是專門用在快取方面吧。
SpringBoot整合RabbitMQ
0.老規矩,加入pom依賴,這已經是Springboot的套路了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1.application.properties配置加入rabbitmq相關配置。
RabbitAutoConfiguration類是其自動載入配置類。
# rabbitmq相關配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
2.關於配置,以上兩步就完成了(Springboot真的太方便了,寫程式碼都是愉悅的)。正常使用時,若作為一個消費者,我們會配置一個接收佇列,這裡為了示例,直接以最小配置來演示下。
配置一個名為okong的佇列
@Configuration
public class RabbitConfig {
/**
* 定義一個名為:oKong 的佇列
* @return
*/
@Bean
public Queue okongQueue() {
return new Queue("okong");
}
}
配置佇列處理類,這裡的佇列就是上面配置的佇列名稱。:
Consumer.java
@Component
//@RabbitListener 監聽 okong 佇列
@RabbitListener(queues = "okong")
@Slf4j
public class Consumer {
/**
* @RabbitHandler 指定訊息的處理方法
* @param message
*/
@RabbitHandler
public void process(String message) {
log.info("接收的訊息為: {}", message);
}
}
編寫訊息傳送類,這裡直接寫成api方法,方便除錯。
DemoController.java
/**
* 簡單示例 傳送和接收佇列訊息
* @author oKong
*
*/
@RestController
public class DemoController {
//AmqpTemplate介面定義了傳送和接收訊息的基本操作,目前spring官方也只集成了Rabbitmq一個訊息佇列。。
@Autowired
AmqpTemplate rabbitmqTemplate;
@GetMapping("/send")
public String send(String msg) {
//傳送訊息
rabbitmqTemplate.convertAndSend("okong", msg);
return "訊息:" + msg + ",已傳送";
}
}
3.啟動應用,正常配置成功,在Rabbitmq的控制檯,是可以看見連線物件的。說明已經正常啟動了。
4.訪問:http://127.0.0.1:8080/send?msg=hello,rabbitmq, 在控制檯就可以看見消費者已經消費到此條訊息了:
2018-07-24 22:59:00.777 INFO 11424 --- [cTaskExecutor-1] c.l.l.springboot.chapter12.Consumer : 接收的訊息為: hello,rabbitmq
控制檯介面,在Queues標籤頁,也可以檢視到佇列okong的訊息。
總結
本章節主要是對RabbitMQ的整合和簡單使用進行了說明,對於高併發系統而言,訊息佇列是一個常見的解決方案了。比如實現非同步訊息的通知,實現消費者/生產者模式等。由於對rabbitmq沒有過多的瞭解,詳細的用法及相關訊息佇列的知識,可自行搜尋相關資料下,這裡就不闡述了。前段時間買了本關於RabbitMQ方面的書籍,等看完了,也希望能單獨寫一篇關於訊息佇列的文章,敬請期待!