【Message Queue】關於Message Queue的幾個常見傳輸協定

更新於 發佈於 閱讀時間約 3 分鐘

AMQP協議

Advanced Message Queuing Portocol(高級訊息佇列協議)
  • Producer: 生產者, 負責生產訊息並送到交換機。
  • Broker: Message Queue的服務器(RabbitMQ…之類的產品)
  • Exchange: 交換器, 它指定訊息按照什麼樣的規則送到哪個Queue。
  • Binding: 綁定規則, 後面會介紹幾種常用的MQ模式。
  • Queue: 消息隊列, 每條訊息都會被送到一個或多個Queue。
  • Consumer: 消費者, 負責接收與處理訊息。

特點

  • 金融業發展出來用於交易所訊息交換的協定。
  • 發布者、交換機、隊列、消費者都可以有多個。因為AMQP是一種網路協議, 所以過程中的發布者、消費者、代理都能分佈在不同的設備上。
  • 發布消息時可以帶上消息屬性(Message Meta), 有些屬性可以被消息代理(Brokers)使用, 有些則為不透明的, 只能被消費者使用。
  • 由於必須假設網路是不可靠的, 因此可能某個消費者處理訊息的過程中可能掛掉, 基於此原因AMQP協議就包含了消息確認(Message Acknowledgements)機制, 確保收到來自消費者的訊息後才將該筆訊息從Queue中刪除。

Exchange交換機

為什麼需要Exchange而不是直接將訊息發送到Queue呢?
AMQP的核心思想就是讓生產者與消費者之間解耦, 因此生產者只需要一直生產消息並不需要知道這條消息會被送到哪個Queue, 而送到哪個Queue的工作就是交換機的事情了, 如此一來生產者與消費者的工作就更加單純。
以下是三種主要的交換機類型:
直連交換機(Direct Exchange)
假設我們要把錯誤訊息寫到文件中, 此時可以使用Routing key並指定為error, 將訊息送到Error的Queue中再由相對的Consumer去做處理。
扇型交換機(Fanout Exchange)
這種類型的交換機就像廣播一樣, 將收到的訊息分發給所有的queue, 再由各個對應的Consumer去處理, 由於廣播的特性, 因此能夠應用在線上系統, 例如群聊。
主題交換機(Topic Exchange)
Topic Exchange其實跟Direct Exchange很類似, 差別在於Direct Exchange是精確匹配, 而Topic Exchange則是可以訂定一些規則。

STOMP協議

Simple Text Orientated Messaging Protocol(簡單文本消息協議)。
以文本方式傳輸,頻寬耗費較大,發展主要目的是讓網頁瀏覽器與訊息系統進行雙向溝通。
COMMAND
header1:value1
header2:value2
Body^@
SEND
destination:/broker/roomId/1
content-length:57
{“type”:”ENTER”,”content”:”o7jD64gNifq-wq-C13Q5CRisJx5E”}

MQTT協議

基於二進制的傳輸協定,格式簡潔、佔用頻寬較小、支持QOS、適用於IOT,採用發布/訂閱模式。
主題的描述方式
Sensor/Temperature/Room1
Sensor/Temperature/Room2
進階的用法
  1. 取得所有房間的溫濕度: Sensor/#
  2. 取得Room1的溫度與濕度: Sensor/+/Room1
如果這篇文章對你有幫助,請不要吝嗇您的LIKE👍
為什麼會看到廣告
avatar-img
120會員
269內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
假設我們每個Queue都只對應一個消費者,那麼就不會有分配問題,但如果今天我們有多個消費者的時候,這時候要怎麼分發?如何做到公平? 一、輪流分發 預設採輪流分發,假設有三個消費者同時消費,則如下圖,訊息平均分配給各個消費者處理。 這種分發方式並未考慮到Consumer的處理能力,假設Consumer
早期的 nodejs 為了具有多線程的能力而引入了 cluster 模組, 但這種創建線程的方式會犧牲共享內存, 且數據通信必須透過 json 來傳輸, 因此具有一定的侷限性及性能問題。 而後發展了worker-threads這個模組之後, 具備共享內存的功能, 使其更輕量。 nodejs 在v1
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
假設我們每個Queue都只對應一個消費者,那麼就不會有分配問題,但如果今天我們有多個消費者的時候,這時候要怎麼分發?如何做到公平? 一、輪流分發 預設採輪流分發,假設有三個消費者同時消費,則如下圖,訊息平均分配給各個消費者處理。 這種分發方式並未考慮到Consumer的處理能力,假設Consumer
早期的 nodejs 為了具有多線程的能力而引入了 cluster 模組, 但這種創建線程的方式會犧牲共享內存, 且數據通信必須透過 json 來傳輸, 因此具有一定的侷限性及性能問題。 而後發展了worker-threads這個模組之後, 具備共享內存的功能, 使其更輕量。 nodejs 在v1
概念: 有限時間內可使用通行證來要求對應的操作權限。 JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串 [HEADER].[PAYLOAD].[SIGNATURE] 1. Header: 主要記載認證的方法 {     "typ": "JWT",     "
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
本文概述了加密貨幣和區塊鏈項目中常見的協議功能和技術元素,包括Distribution, Emission Schedule, Utility/Value Capture等。通過瞭解這些概念,投資者和開發者可以更好地理解市場和技術動態,作出更明智的決策。
Thumbnail
Raydium是基於solone供應鏈的服務系統,採用名為AMM的協議機制,而AMM(自動做市商)是一種智慧完成交易流程的技術。
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
交易對(Trading Pair)是指在加密貨幣交易所上,兩種不同的資產之間的交易對應關係。每個交易對通常包括一種基準資產(如比特幣BTC或以太坊ETH)和另一種交易資產(如美元USD或另一種加密貨幣)。交易對表示用戶可以用一種資產來交換另一種資產。
Thumbnail
ICT / SMC概念與交易方法中闡述了流動性的重要性以及資深交易者和新手交易者之間的區別。這篇文章通俗易懂地解釋了流動性的概念,透過案例說明瞭主力機構收集訂單的行為以及如何應用獵殺流動性的策略。另外,文章還分享了作者在交易生涯中的收穫和思考,提供了對閱讀的交易者或交易新手有新的啟發和想法。
Thumbnail
出國前剛好看到一些有關奧客的新聞 朋友也剛好傳了一個有關奥客的問卷調查給我 令我好好的思考了一下 首先,我認為所有的買賣不管是有形或無形的 都是一個交易過程,賣方販售這物品/體驗 買方認同這價值/價格,所以交易達成 但不知道甚麼時候開始 買賣的交易過程中添加了 "服務" 這一項目 服
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
介紹: DFlow 是一個協議,主要為 DEX 流動性的防禦層,並且增強 Solana 鏈的流動性,用戶也能獲得更小的價差、更低的波動性、及更快速的進行交易,預防有毒訂單的影響
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
本文概述了加密貨幣和區塊鏈項目中常見的協議功能和技術元素,包括Distribution, Emission Schedule, Utility/Value Capture等。通過瞭解這些概念,投資者和開發者可以更好地理解市場和技術動態,作出更明智的決策。
Thumbnail
Raydium是基於solone供應鏈的服務系統,採用名為AMM的協議機制,而AMM(自動做市商)是一種智慧完成交易流程的技術。
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
交易對(Trading Pair)是指在加密貨幣交易所上,兩種不同的資產之間的交易對應關係。每個交易對通常包括一種基準資產(如比特幣BTC或以太坊ETH)和另一種交易資產(如美元USD或另一種加密貨幣)。交易對表示用戶可以用一種資產來交換另一種資產。
Thumbnail
ICT / SMC概念與交易方法中闡述了流動性的重要性以及資深交易者和新手交易者之間的區別。這篇文章通俗易懂地解釋了流動性的概念,透過案例說明瞭主力機構收集訂單的行為以及如何應用獵殺流動性的策略。另外,文章還分享了作者在交易生涯中的收穫和思考,提供了對閱讀的交易者或交易新手有新的啟發和想法。
Thumbnail
出國前剛好看到一些有關奧客的新聞 朋友也剛好傳了一個有關奥客的問卷調查給我 令我好好的思考了一下 首先,我認為所有的買賣不管是有形或無形的 都是一個交易過程,賣方販售這物品/體驗 買方認同這價值/價格,所以交易達成 但不知道甚麼時候開始 買賣的交易過程中添加了 "服務" 這一項目 服
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
介紹: DFlow 是一個協議,主要為 DEX 流動性的防禦層,並且增強 Solana 鏈的流動性,用戶也能獲得更小的價差、更低的波動性、及更快速的進行交易,預防有毒訂單的影響