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
的隊列
@Configurationpublic class RabbitConfig { /** * 定義一個名爲:oKong 的隊列 * @return */ @Bean public Queue okongQueue() { return new Queue("okong"); } }
配置隊列處理類,這裏的隊列就是上面配置的隊列名稱。:Consumer.java
@Component//@RabbitListener 監聽 okong 隊列@RabbitListener(queues = "okong")@Slf4jpublic class Consumer { /** * @RabbitHandler 指定消息的處理方法 * @param message */ @RabbitHandler public void process(String message) { log.info("接收的消息爲: {}", message); } }
編寫消息發送類,這裏直接寫成api方法,方便調試。DemoController.java
/** * 簡單示例 發送和接收隊列消息 * @author oKong * */@RestControllerpublic class DemoController { //AmqpTemplate接口定義了發送和接收消息的基本操作,目前spring官方也只集成了Rabbitmq一個消息隊列。。 @Autowired AmqpTemplate rabbitmqTemplate; @GetMapping("/send") public String send(String msg) { //發送消息 rabbitmqTemplate.convertAndSend("okong", msg); return "消息:" + msg + ",已發送"; } }
在此我向大家推薦一個架構學習交流圈:830478757 幫助突破瓶頸 提升思維能力
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
方面的書籍,等看完了,也希望能單獨寫一篇關於消息隊列的文章,敬請期待!