SpringBoot 整合 RabbitMQ 消息隊列

RabbitMQ的介紹

RabbitMQ是消息中間件的一種,消息中間件即分佈式系統中完成消息的發送和接收的基礎軟件。這些軟件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,現已經轉讓給apache)。

RabbitMQ 作爲目前應用相當廣泛的消息中間件,在企業級應用、微服務應用中充當着重要的角色。特別是在一些典型的應用場景以及業務模塊中具有重要的作用,比如業務服務模塊解耦、異步通信、高併發限流、超時業務、數據延遲處理等。

消息中間件的工作過程可以用生產者消費者模型來表示、即,生產者不斷的向消息隊列發送信息,而消費者從消息隊列中消費信息。具體過程如下:
在這裏插入圖片描述
從上圖可看出,對於消息隊列來說,生產者,消息隊列,消費者是最重要的三個概念,生產者發消息到消息隊列中去,消費者監聽指定的消息隊列,並且當消息隊列收到消息之後,接收消息隊列傳來的消息,並且給予相應的處理。消息隊列常用於分佈式系統之間互相信息的傳遞。

對於RabbitMQ來說,除了這三個基本模塊以外,還添加了一個模塊,即交換機(Exchange)。它使得生產者和消息隊列之間產生了隔離,生產者將消息發送給交換機,而交換機則根據調度策略把相應的消息轉發給對應的消息隊列。那麼RabitMQ的工作流程如下所示:
在這裏插入圖片描述
緊接着說一下交換機。交換機的主要作用是接收相應的消息並且綁定到指定的隊列

交換機有四種類型,分別爲Direct、topic、headers、Fanout。

  • Direct是RabbitMQ默認的交換機模式,也是最簡單的模式。即創建消息隊列的時候,指定一個BindingKey。當發送者發送消息的時候,指定對應的Key。當Key和消息隊列的BindingKey一致的時候,消息將會被髮送到該消息隊列中。

  • topic轉發信息主要是依據通配符,隊列和交換機的綁定主要是依據一種模式(通配符+字符串),而當發送消息的時候,只有指定的Key和該模式相匹配的時候,消息纔會被髮送到該消息隊列中。

  • headers也是根據一個規則進行匹配,在消息隊列和交換機綁定的時候會指定一組鍵值對規則,而發送消息的時候也會指定一組鍵值對規則,當兩組鍵值對規則相匹配的時候,消息會被髮送到匹配的消息隊列中。

  • Fanout是路由廣播的形式,將會把消息發給綁定它的全部隊列,即便設置了key,也會被忽略。

 

RabbitMQ 官網拜讀

首先,讓我們先拜讀 RabbitMQ 官網的技術開發手冊以及相關的 Features,感興趣的朋友可以耐心的閱讀其中的相關介紹,相信會有一定的收穫,地址可見:

http://www.rabbitmq.com/getstarted.html

閱讀該手冊過程中,我們可以得知 RabbitMQ 其實核心就是圍繞 “消息模型” 來展開的,其中就包括了組成消息模型的相關組件:生產者,消費者,隊列,交換機,路由,消息等!而我們在實戰應用中,實際上也是緊緊圍繞着 “消息模型” 來展開擼碼的!

下面,我就介紹一下這一消息模型的演變歷程,當然,這一歷程在 RabbitMQ 官網也是可以窺覽得到的!
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

上面幾個圖就已經概述了幾個要點,而且,這幾個要點的含義可以說是字如其名!

  • 生產者: 發送消息的程序
  • 消費者: 監聽接收消費消息的程序
  • 消息: 一串二進制數據流
  • 隊列: 消息的暫存區/存儲區
  • 交換機: 消息的中轉站,用於接收分發消息。其中有 fanout、direct、topic、headers 四種
  • 路由: 相當於密鑰/第三者,與交換機綁定即可路由消息到指定的隊列!

正如上圖所展示的消息模型的演變,接下來我們將以代碼的形式實戰各種典型的業務場景!

 

參考地址

發佈了159 篇原創文章 · 獲贊 28 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章