關於Message Queue的幾個常見傳輸協定
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(簡單文本消息協議)。
以文本方式傳輸,頻寬耗費較大,發展主要目的是讓網頁瀏覽器與訊息系統進行雙向溝通。
COMMANDheader1:value1header2:value2 Body^@ SENDdestination:/broker/roomId/1content-length:57 {“type”:”ENTER”,”content”:”o7jD64gNifq-wq-C13Q5CRisJx5E”}
MQTT協議
基於二進制的傳輸協定,格式簡潔、佔用頻寬較小、支持QOS、適用於IOT,採用發布/訂閱模式。
主題的描述方式
Sensor/Temperature/Room1
Sensor/Temperature/Room2
進階的用法
- 取得所有房間的溫濕度:
Sensor/#
- 取得Room1的溫度與濕度:
Sensor/+/Room1