RabbitMQ簡介

1、什麼是MQ

消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。
其主要用途:不同進程Process/線程Thread之間通信。

爲什麼會產生消息隊列?有幾個原因:

  • List item不同進程(process)之間傳遞消息時,兩個進程之間耦合程度過高,改動一個進程,引發必須修改另一個進程,爲了隔離這兩個進程,在兩進程間抽離出一層(一個模塊),所有兩進程之間傳遞的消息,都必須通過消息隊列來傳遞,單獨修改某一個進程,不會影響另一個;

  • List item不同進程(process)之間傳遞消息時,爲了實現標準化,將消息的格式規範化了,並且,某一個進程接受的消息太多,一下子無法處理完,並且也有先後順序,必須對收到的消息進行排隊,因此誕生了事實上的消息隊列;

  • 關於消息隊列的詳細介紹請參閱:
    《Java帝國之消息隊列》
    《一個故事告訴你什麼是消息隊列》
    《到底什麼時候該使用MQ》

  • List itemMQ框架非常之多,比較流行的有RabbitMq、ActiveMq、ZeroMq、kafka,以及阿里開源的RocketMQ。本文主要介紹RabbitMq

2、什麼是RabbitMQ

在這裏插入圖片描述

AMQP :Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放
標準,爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不
受產品、開發語言等條件的限制。

RabbitMQ 最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展
性、高可用性等方面表現不俗。具體特點包括:

1.可靠性(Reliability)
RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發佈確認。

2.靈活的路由(Flexible Routing)
在消息進入隊列之前,通過 Exchange 來路由消息的。對於典型的路由功能,RabbitMQ
已經提供了一些內置的 Exchange 來實現。針對更復雜的路由功能,可以將多個
Exchange 綁定在一起,也通過插件機制實現自己的 Exchange 。

3.消息集羣(Clustering)
多個 RabbitMQ 服務器可以組成一個集羣,形成一個邏輯 Broker 。

4.高可用(Highly Available Queues)
隊列可以在集羣中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。

5.多種協議(Multi-protocol)
RabbitMQ 支持多種消息隊列協議,比如 STOMP、MQTT 等等。

6.多語言客戶端(Many Clients)
RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。

7.管理界面(Management UI)
RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方
面。

8.跟蹤機制(Tracing)
如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發生了什麼。

9.插件機制(Plugin System)
RabbitMQ 提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件。

3、架構圖與主要概念

架構圖
在這裏插入圖片描述
主要概念

RabbitMQ Server: 也叫broker server,它是一種傳輸服務。 他的角色就是維護一條
從Producer到Consumer的路線,保證數據能夠按照指定的方式進行傳輸。

Producer: 消息生產者,如圖A、B、C,數據的發送方。消息生產者連接RabbitMQ服
務器然後將消息投遞到Exchange。

Consumer:消息消費者,如圖1、2、3,數據的接收方。消息消費者訂閱隊列,
RabbitMQ將Queue中的消息發送到消息消費者。

Exchange:生產者將消息發送到Exchange(交換器),由Exchange將消息路由到一個
或多個Queue中(或者丟棄)。Exchange並不存儲消息。RabbitMQ中的Exchange有
direct、fanout、topic、headers四種類型,每種類型對應不同的路由規則。

Queue:(隊列)是RabbitMQ的內部對象,用於存儲消息。消息消費者就是通過訂閱
隊列來獲取消息的,RabbitMQ中的消息都只能存儲在Queue中,生產者生產消息並最終
投遞到Queue中,消費者可以從Queue中獲取消息並消費。多個消費者可以訂閱同一個
Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理,而不是每個消費者
都收到所有的消息並處理。

RoutingKey:生產者在將消息發送給Exchange的時候,一般會指定一個routing key,
來指定這個消息的路由規則,而這個routing key需要與Exchange Type及binding key聯
合使用才能最終生效。在Exchange Type與binding key固定的情況下(在正常使用時一
般這些內容都是固定配置好的),我們的生產者就可以在發送消息給Exchange時,通過
指定routing key來決定消息流向哪裏。RabbitMQ爲routing key設定的長度限制爲255
bytes。

Connection: (連接):Producer和Consumer都是通過TCP連接到RabbitMQ Server
的。以後我們可以看到,程序的起始處就是建立這個TCP連接。

Channels: (信道):它建立在上述的TCP連接中。數據流動都是在Channel中進行
的。也就是說,一般情況是程序起始建立TCP連接,第二步就是建立這個Channel。

VirtualHost:權限控制的基本單位,一個VirtualHost裏面有若干Exchange和
MessageQueue,以及指定被哪些user使用

RabbitMQ的5種隊列模式

在這裏插入圖片描述
RabbitMQ官網:https://www.rabbitmq.com/

Docker 安裝部署RabbitMQ:https://blog.csdn.net/weixin_44530530/article/details/92713391

RabbitMQ的5種模式+使用SpringBoot實現:https://blog.csdn.net/weixin_44530530/article/details/92744957

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章