RabbitMQ學習(七):AMQP 0-9-1 協議之簡單概述

說明

通過之前翻譯的六篇官方教程,我們已經學會了如何使用RabbitMQ。我們都知道RabbitMQ是一個支持多種協議的消息隊列,本篇博文將翻譯官方對於AMQP 0-9-1協議的介紹:AMQP 0-9-1 Model Explained。 通過翻譯記錄該協議的內容,加深對RabbitMQ消息隊列的理解。

正文

什麼是AMQP 0-9-1協議?

在閱讀RabbitMQ提供的該協議介紹前,我們可以在網上查找該協議有關信息。在其官網上我們可以看到 :AMQP is the Internet Protocol for Business Messaing. To become the standard protocol for interoperability between all messaging middleware. 可以看出AMQP是消息傳輸的一種規範,一個標準協議

AMQP 0-9-1 (Advanced Message Queuing Protocol 高級消息隊列協議)是一種消息傳輸協議,它使得符合標準的客戶端程序可以與符合標準的中間件代理進行通信。

代理及其作用

消息傳輸代理接收來自發送者(發送消息的程序,也稱爲生產者)的消息,然後把消息路由到消費者(處理消息的程序)。

因爲這是一個網絡協議,發送者,消費者及中間件可以部署在不同的機器上。

簡單概括AMQP 0-9-1 模型

AMQP 0-9-1 模型可以簡單地描述爲:消息被髮送到通常被比作郵局或是郵箱的交換機,交換機根據被稱爲 綁定 的規則將消息副本路由到隊列。然後消息中間件將消息傳遞到已經訂閱隊列的消費者,或者是消費者根據需求從隊列拉取消息。
在這裏插入圖片描述
當發送一個消息時,發送者可能會給消息設置多個屬性(稱爲消息元數據),這個中間件可能會使用部分元數據,但是其餘的元數據對中間件來說都是不可見的,它們只能被接收消息的應用程序使用。

網絡不是完全可靠的,並且應用程序在處理消息時也有可能崩潰。面對這種情況,AMQP 0-9-1 提供了一種消息確認的概念:當一個消息被傳遞到消費者時,消費者應該通知中間件確認消息已經到達。確認消息可以自動發送或者有程序開發人員選擇手動確認。當使用消息確認時,中間件只有在接收到消息(或一組消息)對應的確認消息時,纔將此消息從隊列完全刪除。

在特定情況下,例如,當消息無法被路由時,它將被返回給發送者,或者被丟棄,又或者當中間件實現了擴展時,可以將消息發送到被稱爲“死信隊列”的消列。發送者根據發送消息時使用的參數決定如何處理這種情況。

隊列,交換機和綁定統稱爲AMQP的實體。

AMQP是一種可編程的協議

AMQP 0-9-1 是一種可編程的協議意思是它的實體和路由方案主要都是由應用程序自身定義的,而不是中間件的管理員。因此,爲聲明隊列、交換機及定義它們中間的綁定關係,訂閱隊列等協議操作動作制定了規則。

這給程序開發人員帶來了極大的自由,但是同時也要求開發人員要注意一些潛在的定義衝突。事實上,定義衝突很少出現,一般表示配置錯誤。

程序聲明瞭他們需要的AMQP 0-9-1的實體,定義了必要的路由方案,同時可以選擇刪除不再需要的實體。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章