上節講了緩存數據庫
redis
的使用,在實際工做中,通常上在系統或者應用間通訊或者進行異步通知(登陸後發送短信或者郵件等)時,都會使用消息隊列進行解決此業務場景的解耦問題。這章節講解下消息隊列RabbitMQ
的集成和簡單使用示例。java
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。git
關於AMQP
(摘自互聯網):github
AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。 AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。redis
題外話:其實Redis
也有提供隊列功能。但我以爲,redis
仍是專門用在緩存方面吧。spring
0.老規矩,加入pom依賴,這已是Springboot
的套路了。docker
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
1.application.properties配置加入rabbitmq相關配置。數據庫
RabbitAutoConfiguration
類是其自動加載配置類。api
# 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
方面的書籍,等看完了,也但願能單獨寫一篇關於消息隊列的文章,敬請期待!
目前互聯網上不少大佬都有
SpringBoot
系列教程,若有雷同,請多多包涵了。本文是做者在電腦前一字一句敲的,每一步都是實踐的。若文中有所錯誤之處,還望提出,謝謝。
499452441
lqdevOps
完整示例:chapter-12
關於在Docker下安裝部署Rabbitmq,可點擊Docker:安裝部署RabbitMQ。