引言
消息隊列(Message Queue,MQ)是一種在分佈式系統中實現應用程序間通信的中間件技術。它的核心作用在於通過異步處理的方式,使得發送消息的應用程序(生產者)與接收消息的應用程序(消費者)解耦,從而提升系統的伸縮性、可靠性以及性能。
在消息隊列中,生產者將需要處理的任務封裝成消息發送至消息隊列中,而消費者則從隊列中取出消息進行處理。這樣做的好處主要包括:
- 應用解耦:生產者和消費者之間不直接相互依賴,減少了系統的耦合度。
- 異步處理:允許非實時處理任務,提高響應速度,改善用戶體驗。
- 流量削峯:在高峯期,消息隊列可以暫存大量的請求,避免直接壓垮後端服務。
- 負載均衡:消息隊列可以根據消費者的處理能力動態分配任務,實現更高效的資源利用。
- 錯峯處理和冗餘備份:如果下游系統出現故障,消息隊列可以暫時存儲消息,待系統恢復後再繼續處理;同時,支持消息持久化以防止數據丟失。
RabbitMQ 是一個開源的消息中間件,它基於AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)實現。RabbitMQ 由Erlang編寫,提供了豐富的特性,包括:
- 多協議支持:主要支持AMQP,但也提供其他協議如STOMP和MQTT的插件支持。
- 多消息模型:支持點對點、發佈/訂閱、路由和主題等多種消息傳遞模式。
- 消息持久化:可以設置消息在隊列中的持久化,確保在服務器重啓時不會丟失重要數據。
- 集羣和高可用性:支持節點間的集羣部署,提供高可用性和容錯性。
- 靈活的路由機制:通過交換機(Exchange)來決定如何將消息路由到對應的隊列中。
- 跨語言客戶端支持:爲Java、Python、Ruby、.NET、PHP、C/C++、Node.js等多種編程語言提供了客戶端庫,方便各種環境下的開發者集成使用。
低代碼技術是一種通過可視化界面和少量編碼來快速開發應用程序的方法。它提供了可拖拽的組件和預構建的功能模塊,開發者可以通過配置和定製來創建應用。低代碼技術能夠極大地提高開發效率,降低開發成本,並且無需深入的編程知識。它適用於快速原型開發、企業級應用開發、業務流程自動化等各種場景,使開發者可以專注於業務邏輯而非底層技術實現。
今天小編就爲大家介紹一下如何在葡萄城公司的低代碼開發平臺【活字格】中使用RabbitMQ。
環境準備
低代碼與消息隊列
爲了讓活字格的功能更加地豐富、強大,活字格中也支持了RabbitMQ的功能。
插件下載請戳:消息隊列插件包
關於RabbitMQ的部署可以參考這篇文章:活字格無縫對接RabbitMQ消息隊列教程
插件安裝好後:
插件看起來多,但不是每一個我們都需要頻繁地用,大部分是用來做配置的。如果你對RabbitMQ熟悉,其實你也可以完全自己在它的web管理後臺來配置,可能更加方便。
這裏將插件分爲幾個類,讓大家更好了解它的作用:
類別 | 包含插件 | 作用描述 |
---|---|---|
服務器連接conneciton | 創建服務器連接刪除服務器連接獲取所有連接名 | 用來與Rabbit MQ服務器建立連接,可連接本機/內網/外網/雲服務器等等... |
交換機管理Exchange | 創建交換機刪除交換機 | 用來創建或刪除一個交換機Exchange交換機是Rabbit MQ裏的重要概念,它負責將消息分配到不同列隊。 |
隊列管理Queue | 創建一個隊列刪除隊列清空隊列 | 用來創建或刪除一個隊列隊列是用來存放待發布的消息的,交換機通過規則將消息存放到隊列,消費者通過訂閱隊列拿到消息 |
綁定Binding | 綁定交換機與隊列 | 將交換機與隊列按一定規則進行綁定 |
通道Channel | 創建連接通道關閉連接通道 | 這是消費者與服務器通信的通道,也可以理解爲信道,它包括一些獨特的配置,來定義本次通信的規則 |
訂閱 | 開始訂閱隊列停止訂閱隊列獲取列隊消息 | 這是最常用也是最核心的功能,它用來訂閱或取消訂閱一個隊列,當你訂閱後,有新的消息會主動的推送過來從而觸發我們實現編排好的處理命令 |
在測試期間,我們可以一邊調試,一邊查看RabbitMQ的管理後臺,看我們的每一個操作是否都反應在了後臺。
一般來說,開啓web管理插件後,在服務器的15672端口會開放一個web系統,登錄即可查看。
訂閱隊列的方法
如果你已經完成了交換機、列隊的創建和綁定,你可以直接使用插件發送一條消息來測試。
第1步:連接服務器
連接後會得到一個“連接標識”,記得保存~
第2步:訂閱消息
使用第一步的“連接標識”和你要訂閱的“隊列名稱”來完成訂閱。訂閱成功後,會返回一個“消費者標識”,取消訂閱的時候需要用到。
注意:新版本增加了多線程處理消息功能,可利用CPU的多線程同時處理多條消息。
消息到達事件:
這是核心中的核心了,我們必須定義消息到達後,如何處理該消息?
該命令內可以拿到消息內容、消息頭等數據。有了這些數據,我們就可以任意編輯需要處理消息的邏輯了。
溫馨提示:如果沒有勾選“消息自動確認”,那麼在消息到達事件裏,如果出現異常或命令最終返回值不爲0,那麼爲了確保消息的準確處理,該條消息不會被確認。
簡單的來說就是,如果你處理消息的邏輯報錯了,那麼插件會知道,不會給你把消息確認,讓它繼續留在列隊,接下來還會被訂閱者收取到。這樣做的好處顯而易見,假如我收到了一條消息,但是我沒有處理好它,如果這時RabbitMQ以爲我處理完了,直接刪掉了該消息,那我再也沒有機會去處理了,也間接的導致該條消息地丟失。
第3步:發送消息
剩下的就是發佈消息了,只需要提供消息內容即可,其他配置均可默認即可;消息發佈後,會返回一個“唯一消息標識”用於和你的業務數據形成關聯。
PS:發佈消息和訂閱消息,都可以很多服務器一起參與,比如說:你有三臺服務器都部署了活字格應用,他們可能都是不同應用,但是不妨礙他們都向RabbitMQ發佈消息、訂閱消息。
總結
以上就是消息隊列RabbitMQ在活字格中的應用,如果您想了解更多信息,歡迎點擊這裏查看。
擴展鏈接: