對於軟體世界中Message Queue有興趣的朋友可以先閱讀這一篇「【資訊軟體知識】井然有序的處理機制 - Message Queue」建立基礎知識之後,再來看看這一篇會更容易進入情境唷!
上一篇我們有談論到Message Queue的架構之下,使用到通訊協定之一的「【資訊軟體知識】 Message Queue的傳輸協定 - MQTT」,主要追求速度,但另一個傳輸協定AMQP也就是今天的主題,著重於可靠性、豐富性,非常適合用於穩定的銀行體系。
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則是可以訂定一些規則。
結語
不難發現其實這種通訊協定變化很多,很適合比較複雜的應用程式之間的溝通橋樑,但是缺點就是會有一些額外的耗損,並沒有辦法像MQTT那麼輕巧,因此如何選擇就端看應用場景的設計囉。
留言
張貼留言