SpringBoot | 第十二章:RabbitMQ的集成和使用

前言

上節講了緩存數據庫redis的使用,在實際工做中,通常上在系統或者應用間通訊或者進行異步通知(登陸後發送短信或者郵件等)時,都會使用消息隊列進行解決此業務場景的解耦問題。這章節講解下消息隊列RabbitMQ的集成和簡單使用示例。java

RabbitMQ介紹

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

SpringBoot集成RabbitMQ

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系列教程,若有雷同,請多多包涵了。本文是做者在電腦前一字一句敲的,每一步都是實踐的。若文中有所錯誤之處,還望提出,謝謝。

老生常談

  • 我的QQ:499452441
  • 微信公衆號:lqdevOps

公衆號

我的博客:https://blog.lqdev.cn

完整示例:chapter-12

關於在Docker下安裝部署Rabbitmq,可點擊Docker:安裝部署RabbitMQ

相關文章
相關標籤/搜索