1.RabbitMQ入門-概念、安裝、配置

peng_boke發表於2024-04-12

前言

RabbitMQ:高併發、高可用。

幾年前學習過RabbitMQ,但是筆記沒有做好,而且隨著工作的深入,很多不理解的東西需要重新規劃。

基礎篇:概念、應用場景、基本安裝。

核心篇:基本訊息、工作佇列、釋出訂閱、路由、主題。

進階篇:普通叢集、映象佇列、負載均衡、監控心跳。

1.訊息佇列概念和場景

1.1概念

訊息佇列全稱MessageQueue,簡稱MQ。本質是一個佇列,FIFO先進先出,只不過佇列中存放的內容是message,從而稱為訊息佇列(訊息+佇列)。

主要用途:不同服務server、程序process、執行緒thread之間通訊。

Broker
Broker的概念來自與Apache ActiveMQ,通俗的講就是MQ的伺服器。
生產者和消費者
訊息生產者Producer:傳送訊息到訊息佇列。
訊息消費者Consumer:從訊息佇列接收訊息。
點對點(執行緒池)
訊息生產者向一個特定的佇列傳送訊息,訊息消費者從該佇列中接收訊息。
一條訊息只有一個消費者能收到。
123.png
釋出訂閱
實際操作過程中,釋出訂閱訊息模型中,支援向一個特定的主題Topic釋出訊息,0個或多個訂閱者接收來自這個訊息主題的訊息。在這種模型下,釋出者和訂閱者彼此不知道對方。
必須先訂閱,再傳送訊息,而後接收訂閱的訊息,這個順序必須保證。
v2-11012861f81b53fe9c29a1942af7c8c4_720w
訊息的順序性保證
基於Queue訊息模型,利用FIFO先進先出的特性,可以保證訊息的順序性。
訊息的ACK確認機制
即訊息的Ackownledge確認機制,為了保證訊息不丟失,訊息佇列提供了訊息Acknowledge機制,即ACK機制,當Consumer確認訊息已經被消費處理,傳送一個ACK給訊息佇列,此時訊息佇列便可以刪除這個訊息了。
如果Consumer當機/關閉,沒有傳送ACK,訊息佇列將認為這個訊息沒有被處理,會將這個訊息重新傳送給其他的Consumer重新消費處理。
透過犧牲吞吐量獲得實時性。
訊息的持久化
訊息的持久化,對於一些關鍵的核心業務來說是非常重要的,啟用訊息持久化後,訊息佇列當機重啟後,訊息可以從持久化儲存恢復,訊息不丟失,可以繼續消費處理。
對於生產者,將資料傳送到訊息佇列,訊息佇列會儲存多個副本,即使MQ伺服器奔潰,重啟仍能找到生產者的訊息資料。
對於消費者,拉取到訊息後,將返回一個資訊給MQ告訴它已經獲得了訊息,MQ將儲存相關資料,即使MQ伺服器奔潰,重啟仍能知道消費者已經獲取了哪些資料,避免重複傳送。
訊息佇列的非同步處理
同步:訊息的收發支援同步收發的方式。
非同步:訊息的收發同樣支援非同步方式:非同步傳送訊息,不需要等待訊息佇列的接收確認;非同步接收訊息,以Push的方式觸發訊息消費者接收訊息。
訊息佇列的事務支援
訊息的收發處理支援事務,例如:在任務中心場景中,一次處理可能涉及多個訊息的接收、處理,這處於同一個事務範圍內,如果一個訊息處理失敗,事務回滾,訊息重新回到佇列中。

1.2場景

  • 削峰填谷
  • 應用解耦
  • 非同步處理
  • 釋出訂閱
  • 訊息驅動

需要根據業務場景選擇合適的訊息佇列。

image-20240407002610665

2.RabbitMQ原理

Broker :即RabbitMQ的實體伺服器。提供一種傳輸服務,維護一條從生產者到消費者的傳輸線路,保證訊息資料能按照指定的方式傳輸。
Exchange :訊息交換機。指定訊息按照什麼規則路由到哪個佇列Queue。
Queue :訊息佇列。訊息的載體,每條訊息都會被投送到一個或多個佇列中。
Binding :繫結。作用就是將Exchange和Queue按照某種路由規則繫結起來。
Routing Key:路由關鍵字。Exchange根據Routing Key進行訊息投遞。定義繫結時指定的關鍵字稱為Binding Key。
Vhost:虛擬主機。一個Broker可以有多個虛擬主機,用作不同使用者的許可權分離。一個虛擬主機持有一組Exchange、Queue和Binding。
Producer:訊息生產者。主要將訊息投遞到對應的Exchange上面。一般是獨立的程式。
Consumer:訊息消費者。訊息的接收者,一般是獨立的程式。
Connection:Producer 和Consumer 與Broker之間的TCP長連線。
Channel:訊息通道,也稱通道。在客戶端的每個連線裡可以建立多個Channel,每個Channel代表一個會話任務。在RabbitMQ Java Client API中,channel上定義了大量的程式設計介面。

121.png

3.Docker Desktop安裝RabbitMQ

3.1安裝Docker Desktop

安裝Docker Desktop

地址:https://www.docker.com/products/docker-desktop/

image-20240407003342238

等待安裝完成

image-20240407004218453

3.2Unexpected WSL errpr

執行Docker Desktop報錯是因為電腦環境問題,請檢查電腦是否開啟支援虛擬化。

image-20240407004636462

開啟工作管理員確認

image-20240407010444475

啟用或關閉Windows功能檢視並安裝。

image-20240407010525241

image-20240407012349164

安裝後重啟,開啟Docker Desktop正常。

image-20240407012402103

3.3安裝RabbitMQ

# 檢視docker版本
docker -v
# 執行rabbitmq
docker run -it -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management

docker run :建立一個新的容器並執行一個命令

  • -a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;
  • -d: 後臺執行容器,並返回容器ID;
  • -i: 以互動模式執行容器,通常與 -t 同時使用;
  • -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
  • -P: 隨機埠對映,容器內部埠隨機對映到主機的埠
  • -p: 指定埠對映,格式為:主機(宿主)埠:容器埠
  • --name="nginx-lb": 為容器指定一個名稱;
  • --volume , -v: 繫結一個卷

image-20240407013031864

4.RabbitMQ管理介面

訪問:http://localhost:15672/

預設賬號:guest gutest

image-20240407201857609

描述、連結、通道、交換機、訊息佇列、管理員

image-20240407202234528

新增一個使用者

image-20240407202539435

配置一個虛擬機器

image-20240407202447362

配置完畢

image-20240407202509127

創作不易,感謝支援。

wxzf

相關文章