1. 程式人生 > >[1]AMQP(高階訊息佇列協議) ----入門

[1]AMQP(高階訊息佇列協議) ----入門

接觸AMQP協議已經有一段時間了,這個協議比想象的中的要複雜一些,特別是針對AMQP-1-0以前的版本。具體的概念,網上可以搜尋到很多的資料,本文借花獻佛,讓讀者對AMQP協議有一個大概的瞭解。重點是在後續章節的關於一些遇到的技術難點的解決方案的分享。

最新的AMQP協議是1.0,但是以前還包括其他版本的協議

Final Specification by AMQP Working Group:


AMQP 1.0 Final, as contributed to OASIS.

Older Specifications:
AMQP version 0-10 by the AMQP Working Group

AMQP version 0-9-1 by the AMQP Working Group

AMQP version 0-9 by the AMQP Working Group

AMQP version 0-8 by the AMQP Working Group

AMQP的全稱是Advanced Message Queuing Protocol,翻譯過來就是高階訊息佇列協議。簡單來說,AMQP是一個廠商中立、語言無關的Message Broker規範。(具體請參考http://blog.csdn.net/anyaas/article/details/17637141)

AMQP規範中有幾個核心的概念:

  • Message
  • Virtual Host
  • Exchange
  • Queue
  • Binding
  • Routing Key
  • Binding Key
  • Exchange Type
  • Publisher/Producer
  • Subscriber/Consumer
  • Connection
  • Channel

Virtual Host

每個Message Broker由一個或 Virtual Host構成;可以類比一下理機和虛擬機器。Virtual Host相當於一個獨立的名稱空間,它有屬於自己的Exchange、Queue以及的一些相關物件。不同Virtual Host之間的Exchange可以重名。Queue只能和相同Virtual Host中的Exchange進行繫結。

Exchange

每個Virtual Host包含0或多個Exchange。Exchange負責把Message轉發到Queue。每個Exchange可以有0或者多個Queue。每個Queue只能監聽1個Exchange。

Queue

Queue即訊息佇列,負責儲存Exchange轉發過來的Message。注意,是Queue,所以Message是First-In-First-Out。

Binding

Binding指的是Exchange根據規則作出訊息轉發決策的過程。Message到達Exchange,Exchange此時並不知道Message應該被轉發到哪些Queue,然後Exchange根據規則對Message進行Binding決策,Binding完成之後,Exchange根據Binding的結果將Message轉發到正確的Queues。

Routing Key

每個Message一般來說必須指定一個Routing Key,Exchange根據Message的Routing Key進行Binding,然後完成Message的轉發。

Binding Key

每個Queue一般來說必須指定一個Binding Key。 Binding的過程其實就是根據一定的規則判定Message的Routing Key是否與Queue的Binding Key匹配,如果匹配,則轉發Message到Queue。如果Message的Routing Key與多個Queue的Binding Key匹配,則所有匹配的Queue都會收到該Message。

Exchange Type

Exchange Type決定了Binding的匹配規則。AMQP支援三種Exchange Type:

  • Direct Exchange
  • Topic Exchange
  • Fanout Exchange

如果你熟悉網路中單播、組播、廣播的概念的話,你可以簡單理解為:Direct Exchange就是單播,Topic Exchange就是組播,Fanout Exchange就是廣播。

Connection

Publisher/Producer與Virutal Host 或 Subscriber/Consumer與Virtual Host之間的TCP連線。

Channel

通過多路複用技術,多個Channel共享同一個Connection。Message通過Channel在Publisher/Producer、Virutal Host、Subscriber/Consumer之間傳遞。

比較常見的第三方的實現有:

(1) Qpid

Qpid 是 Apache 開發的一款面向物件的訊息中介軟體,它是一個 AMQP 的實現,可以和其他符合 AMQP 協議的系統進行通訊。Qpid 提供了 C++/Python/Java/C# 等主流程式語言的客戶端庫,Qpid 提供了很多額外的 HA 特性,非常適於叢集環境下的訊息通訊。

雖然QPID 有0.9 和1.0的版本,而且1.0的版本有Exchange的功能

因為QPID在我們的plugin只支援1.0的版本,所以在plugin的設計上,Sender activity沒有Exchange 屬性

它提供了 C++ 和 Java 兩個版本的 broker服務端,並支援多種語言的客戶端。C++版本的伺服器端具備高效能/低消耗以及RDMA支援;而Java版本的伺服器則支援JMS。Qpid 還提供了一些額外的特性:

採用 Corosync 來保證了叢集環境下的 Fault-tolerant 特性
支援 XML 型別的 Exchange,當訊息格式為 XML 時,可以利用 Xquery 進行過濾
支援 plugin,使用者可以方便地增加新的功能,比如新的 exchange 型別
提供了安全認證特性,任何 producer/consumer 需要和 broker 通訊時,都需要提供身份認證。QPID 的安全認證使用 SSL 協議。
授權協議: Apache
開發語言: Java C/C++
作業系統: 跨平臺
官網:http://qpid.apache.org 

比較好的部落格有:

https://www.ibm.com/developerworks/cn/opensource/os-cn-qpid1/
http://blog.sina.com.cn/s/blog_5bce66f00101htgr.html

(2) RabbitMQ

RabbitMQ是基於ErLang語言開發的,官方RabbitMQ下載地址:http://www.rabbitmq.com/download.html,選擇相應的系統版本,進行下載。Erlang版本的選擇儘量選擇最新版本即可。

比較好的部落格有:

http://jaeger.blog.51cto.com/11064196/1762756(經典)
http://www.voidcn.com/blog/Olaking/article/p-3890458.html
https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E4%BB%8B%E7%BB%8D.html

Rabbit in action 中文版可以從下面下載到

http://book.51cto.com/art/201510/495741.htm

(3)ActiveMQ

ActiveMQ是Apache軟體基金下的一個開源軟體,它遵循JMS1.1規範(Java Message Service),是訊息驅動中介軟體軟體(MOM)。它為企業訊息傳遞提供高可用,出色效能,可擴充套件,穩定和安全保障。ActiveMQ使用Apache許可協議。因此,任何人都可以使用和修改它而不必反饋任何改變。這對於商業上將ActiveMQ用在重要用途的人尤為關鍵。MOM的工作是在分散式的各應用之間排程事件和訊息,使之到達指定的接收者。所以高可用,高效能,高可擴充套件性尤為關鍵。

ActiveMQ的目標是在儘可能多的平臺和語言上提供一個標準的,訊息驅動的應用整合。ActiveMQ實現JMS規範並在此之上提供大量額外的特性。這些額外的特性也會在這本書中詳細闡述。

官方網站
http://activemq.apache.org/

ActiveMQ in action 中文版
http://download.csdn.net/detail/jacky68147527/5925161

如何使用安裝ActiveMQ?
H:\amqp\apache-activemq-5.13.3\data


如何配置AMQP
http://activemq.apache.org/amqp.html

相關推薦

[1]AMQP(高階訊息佇列協議) ----入門

接觸AMQP協議已經有一段時間了,這個協議比想象的中的要複雜一些,特別是針對AMQP-1-0以前的版本。具體的概念,網上可以搜尋到很多的資料,本文借花獻佛,讓讀者對AMQP協議有一個大概的瞭解。重點是在後續章節的關於一些遇到的技術難點的解決方案的分享。 最新的AMQP協議

RabbitMQ AMQP (高階訊息佇列協議)

目錄 RabbitMQ AMQP (高階訊息佇列協議) AMQP協議是Message Queue訊息佇列的一種協議,RabbitMQ 是基於AMQP協議實現的一種訊息佇列框架。 掌握RabbitMQ,必須要對AMQP的協議有所瞭解,才能使用的得心應手。 本文主要介紹AMQP協議和RabbitMQ的基本概念和

[2]AMQP(高階訊息佇列協議) ----QPID不得不說的事

如果說到AMQP協議,則不得不提的就是QPID。QPID的論壇現在十分的活躍,基本上白天提的問題,晚上馬上就能得到回覆。由此可見QPID的活躍程度。 大家可以到http://qpid.2158936.n2.nabble.com/網站上面註冊一個賬號,真的非常的好,吐血推薦給

AMQP高階訊息佇列協議

AMQP,即Advanced Message Queuing Protocol,一個提供統一訊息服務的應用層標準高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。基於此協議的客戶端與訊息中介軟體可傳遞訊息,並不受客戶端/中介軟體不同產品,不同的開發語言等

深入剖析 RabbitMQ —— Spring 框架下實現 AMQP 高階訊息佇列協議

前言 訊息佇列在現今資料量超大,併發量超高的系統中是十分常用的。本文將會對現時最常用到的幾款訊息佇列框架 ActiveMQ、RabbitMQ、Kafka 進行分析對比。詳細介紹 RabbitMQ 在 Sprinig 框架下的結構及實現原理,從Producer 端的事務、回撥函式(ConfirmCa

訊息佇列RabbitMQ入門與5種模式詳解

1.RabbitMQ概述 簡介: MQ全稱為Message Queue,訊息佇列是應用程式和應用程式之間的通訊方法; RabbitMQ是開源的,實現了AMQP協議的,採用Erlang(面向併發程式語言)編寫的,可複用的企業級訊息系統; AMQP(高階訊息佇列協議)

訊息佇列入門篇)

什麼是訊息佇列? 小時候,我的爸爸希望我多讀書,並常常尋找好書給我看,最開始他每次看見我寫完作業之後就給我拿來書,並親自監督我讀完之後他才忙自己的事情。久而久之,我養成了讀書的習慣。所以方式就改成了,爸爸想要我讀的書,都放在書架上,由於我已經養成了好習慣,一有

RabbitMQ .NET訊息佇列使用入門(三)【MVC實現RPC例子】

每一個孤獨的靈魂都需要陪伴 RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之

RabbitMQ .NET訊息佇列使用入門(二)【多個佇列訊息傳輸】

孤獨將會是人生中遇見的最大困難。 實體類: DocumentType.cs public enum DocumentType { //日誌 Journal = 1, //論文

常見訊息佇列協議總結

分散式系統中常用通訊模型主要是“請求-應答”模型和“釋出-訂閱”模型。前者常見如RPC通訊,常用HTTP REST或Thrift等協議;後者多指訊息佇列MQ通訊。 RPC大多屬於請求-應答模式,也包括越來越多響應式正規化,對於需要點對點互動、強事務保證和延遲敏感的服務/應用之間的通訊,RPC是優於訊息佇列的。

編譯PHP擴充套件amqp & php訊息佇列 rabbitmq

首先介紹下AMQP: AMQP——高階訊息佇列協議,目前比較有名氣的實現大概就是大名鼎鼎的RabbitMQ了。 RabbitMQ是一個在AMQP基礎上完成的,可複用的企業訊息系統。他遵循Mozilla Public License開源協議。 PHP 下安裝拓展: wget https://github

訊息佇列activemq入門教程

關於web系統中佇列的使用參看文章http://jinnianshilongnian.iteye.com/blog/2321715 前言: 訊息佇列僅僅是佇列中的一個分支應用,使用場景:各個微服務之間的通訊,包括資料非同步同步等等場合,比如下訂單業務,可能涉及到使用者中心服

訊息佇列訊息佇列概述與AMQP協議

轉載請註明出處:https://blog.csdn.net/jinixin/article/details/83552185     前面幾篇文章中談了rpc服務, rpc可用於程序間通訊, 使應用得以解耦, 而程序間通訊還可使用訊息佇列來完成. 本篇文章就簡

php amqp訊息佇列教程1-程式碼實現例項

兩年前曾發過一篇《用Python嘗試RabbitMQ》,沒想到兩年後的今天,基於PHP的amqp資料還是少得可憐,原來的幾個擴充套件也都一個個被廢棄,只剩amqp還健在,且被PECL收錄。雖說被收錄,可官方手冊中的資訊還是略顯單薄。言歸正傳,amqp擴充套件的安裝就不多說了

訊息佇列AMQP協議

一、 訊息佇列 訊息佇列(Message Queue,簡稱MQ)提供非同步通訊協議,可以實現程序間通訊或同一程序不同執行緒間的通訊。其中‘訊息’是指包含必要資訊的資料。訊息的傳送者傳送完資料後,立即返回,訊息被儲存在訊息隊列當中,對這個訊息感興趣的消費者會訂閱

初識訊息佇列——WebSphere MQ入門

訊息佇列是什麼 訊息佇列對於我們來說應該並不陌生,訊息佇列(Message Queue,簡稱MQ),首先它是個佇列,先進先出。佇列裡面放的是訊息,訊息則指的是兩個獨立的系統之間傳遞的資料,這兩個系統可以是異構的,可以在不同的作業系統上,只需要寫一段程式碼呼叫一下提供的API既可以傳送

AMQP訊息佇列的測試方法

作者簡介 羊老師,目前就職於餓了麼物流研發部,運單與服務業務線的測試負責人,同時也負責測試基礎設施的開發與維護,致力於自動化測試及工程效率的提升工作 前言 在大型網際網路架構中經常會用到訊息佇列(Message Queue)這種中介軟體,在服務端測試時,許多測試同學通過工具對API和資料庫都

7-1 Windows訊息佇列 (25 分)

軟體學院第十四次訓練 205 分 程式設計題共 9 小題,共計 205 分 剩餘時間: 693:02:17 剩餘時間: 693:02:17 程式設計題 7-1 Windows訊息佇列 (25 分) 訊息佇列是Win

(五)RabbitMQ訊息佇列-安裝amqp擴充套件並訂閱/釋出Demo(PHP版)

本文將介紹在PHP中如何使用RabbitMQ來實現訊息的訂閱和釋出。我使用的系統依然是Centos7,為了方便,應用伺服器我使用Docker進行部署,容器環境:centos7+nginx+php5.6。 執行環境,安裝AMQP擴充套件: 如何安裝Docker我就不說了,網上很多教程非

訊息佇列中介軟體(三)Kafka 入門指南

Kafka 來源 Kafka的前身是由LinkedIn開源的一款產品,2011年初開始開源,加入了 Apache 基金會,2012年從 Apache Incubator 畢業變成了 Apache 頂級開源專案。同時LinkedIn還有許多著名的開源產品。如: 分散式資料同步系統Databus