AMQP介紹
AMQP,即 Advanced Message Queuing Protocol(高級消息隊列協議),是一個網絡協議,是應用層協議 的一個開放標準,為面向消息的中間件設計。基于此協議的客戶端與消息中間件可傳遞消息,并不受客戶端/中 間件不同產品,不同的開發語言等條件的限制。2006年,AMQP 規范發布。類比HTTP。
RabbitMQ 簡介
2007年,Rabbit 技術公司基于 AMQP 標準開發的 RabbitMQ 1.0 發布。RabbitMQ 采用 Erlang 語言開發。 Erlang 語言由 Ericson 設計,專門為開發高并發和分布式系統的一種語言,在電信領域使用廣泛。
RabbitMQ 基礎架構如下圖:


相關概念
(1)publisher:生產者
(2)consumer:消費者
(3) Broker:接收和分發消息的應用,RabbitMQ Server就是 Message Broker
(4) Virtual host:虛擬主機,隔離不同租戶的exchange、queue、消息的隔離。出于多租戶和安全因素設計的,把 AMQP 的基本組件劃分到一個虛擬的分組中,類似于網 絡中的 namespace 概念。當多個不同的用戶使用同一個 RabbitMQ server 提供的服務時,可以劃分出多 個vhost,每個用戶在自己的 vhost 創建 exchange/queue 等
(5) Connection:publisher/consumer 和 broker 之間的 TCP 連接
(6) Channel:如果每一次訪問 RabbitMQ 都建立一個 Connection,在消息量大的時候建立 TCP Connection 的開銷將是巨大的,效率也較低。Channel 是在 connection 內部建立的邏輯連接,如果應用程序支持多線 程,通常每個thread創建單獨的 channel 進行通訊,AMQP method 包含了channel id 幫助客戶端和 message broker 識別 channel,所以 channel 之間是完全隔離的。Channel 作為輕量級的 Connection 極大減少了操作系統建立 TCP connection 的開銷
(7)Exchange:交換機,負責消息路由。message 到達 broker 的第一站,根據分發規則,匹配查詢表中的 routing key,分發消息到 queue 中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
(8) Queue:隊列,存儲消息。消息最終被送到這里等待 consumer 取走
(9) Binding:exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key。Binding 信息被保存 到 exchange 中的查詢表中,用于 message 的分發依據
工作模式
RabbitMQ 提供了 7 種工作模式:簡單模式、work queues、Publish/Subscribe 發布與訂閱模式、Routing 路由模式、Topics 主題模式、RPC 遠程調用模式(遠程調用,不太算 MQ;暫不作介紹)。
官網對應模式介紹:https://www.rabbitmq.com/getstarted.html

JMS
(1) JMS 即 Java 消息服務(JavaMessage Service)應用程序接口,是一個 Java 平臺中關于面向消息中間件 的API
(2) JMS 是 JavaEE 規范中的一種,類比JDBC
(3) 很多消息中間件都實現了JMS規范,例如:ActiveMQ。RabbitMQ 官方沒有提供 JMS 的實現包,但是開 源社區有