Skip to content

RabbitMQ(1)

Published: at 03:42 AM

簡介

RabbitMQ 是一個開源的消息隊列(有時又稱 訊息導向的中間件 Message-oriented middleware),由 Erlang 所寫成的應用。
AMQP(Advanced Message Queuing Protocol) 是一個應用層協議,用於在應用程序之間傳遞消息;RabbitMQ 是他的實作該協議的應用程式之一。

這邊先使用 Docker 進行測試。這邊會有兩版本映像版本,分別為有 management 的版本不帶 management 的版本
差異為是否具有管理介面,當在進行開發或是學習時優先使用具有管理介面的版本。 管理介面版本包含了基礎版所有功能,並且提供額外的管理介面插件(Management Plugin)。提供了 網頁監控查看佇列狀態管理使用者監控效能指標查看連接狀態 等功能。

為什麼會用到他?

環境準備

預設帳號密碼: guest/guest

docker pull rabbitmq:3-management
docker pull docker.io/library/rabbitmq:3-management:latest

可使用環境變數修改預設帳號密碼 類似這樣:(RABBITMQ_DEFAULT_USER,RABBITMQ_DEFAULT_PASS)

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

執行 RabbitMQ

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

當執行 rabbitmq 後,可以透過 15672 port 進行管理介面 (http://localhost:15672) 的操作。 RabbitMQ

解釋一下關於 AMQP

先提出一些在裡面的名詞

名詞說明
Producer生產者,發送消息的應用程式(產生任務的傢伙)
Consumer消費者,接收消息的應用程式(負責消化任務的工人)
Broker代理,接收生產者發送的消息,並將消息發送給消費者(中繼站)
Queue佇列,存放消息的地方
Exchange交換機,決定消息的路由規則(根據規則轉到對應的佇列: 規則)
Binding綁定,交換機和佇列之間的綁定關係
Routing Key路由鍵,交換機根據路由鍵將消息發送到對應的佇列
Virtual Host虛擬主機,一個 RabbitMQ 伺服器可以有多個虛擬主機,每個虛擬主機是一個獨立的訊息隊列
Connection連接,生產者或消費者與 RabbitMQ 伺服器之間的連接
Channel通道,生產者或消費者與 RabbitMQ 伺服器之間的通道,一個連接可以有多個通道

映射 RabbitMQ 和 AMQP 的關係

AMQP 圖片出處:https://medium.com/@chnwsw01/rabbitmq-6eead78a2539

根據上述圖片,我們可以大概建立一個基礎的觀念模型。

RabbitMQ 支援多種類型的 Exchange 包括了…

程式碼範例:

Sending doesn’t work ! (發送不成功)

如果推送訊息時並毫無”已發送”的回應,或許可能原因是 broker 空間不足導致的。(默認情況下,至少要有 50MB 的空間)
而拒絕接收消息,可以檢查 broker Log 是否有無相關紀錄,並在必要時降低所需空間的閥值(disk_free_limit)。

照著官網範例來一步一步的進行程式碼撰寫

  1. Hello world ! 最簡單執行的範例 -> exchange 空字串,queue 名稱為 hello hello-world repository 該範例為官方網站之範例,並增加一些註解且套上 symfony 方便自己呼叫。 關注的內容應為對應之 class 的 execute 方法,該方法為執行的主要邏輯。

剩餘的部分再繼續寫。。。


Previous Post
Ollama API Document 中文翻譯
Next Post
Mailpit - 測試 Email 服務