理解 AMQP, RabbitMQ

前言

我先介紹RabbitMQ 和?JMS的關系:

RabbitMQ是一款輕量、可靠且易拓展的便捷的消息Broker,不同于很多java開發(fā)者所了解的那些Broker,RabbitMQ不是基于JMS的,而是AMQP(the Advanced Message Queuing Protocol )。所幸Java客戶端庫和Spring會幫我們集成——所以不要擔心使用RabbitMQ。雖然AMQP暴露了一些JMS的接口,但是AMQP和JMS在操作上是有很大不同的。

Exchanges, queues 和綁定關系

AMQP是由發(fā)布者和消費者構成的消息協(xié)議,發(fā)布者生產(chǎn)消息,消費者對消息進行消費。Broker負責對消息進行投遞,為了確保消息能夠準確投遞,Broker提供了兩個關鍵的組件:exchange(交換機)和queue(隊列),圖示:

消息投遞

發(fā)布者發(fā)送消息到交換機,消費者從隊列里面獲取消息進行消費。那么生產(chǎn)者和消費者是如何發(fā)現(xiàn)對方的呢?答案就是:exchange name,生產(chǎn)者或者消費者端創(chuàng)建一個exchange(通常exchange要攜帶public類型的name)。

How that publication happens depends on the circumstances, but one might put it in public API documentation or send it to known clients.

而消息又是如何從exchange路由到queue的呢?

1: queue綁定到exchange上,通常,消費者都會創(chuàng)建一個隊列并且同時綁定該隊列到指定的exchange上;

2:消費者接收從綁定的exchange上的queue獲取消息;

想要理解綁定的過程,先要了解一下AMQP 消息的結(jié)構:


圖示

headers 和?properties 是key/value 鍵值對,兩者的不同是:headers需要遵循AMQP的規(guī)范,而properties可以包含任意的應用程序的信息。message內(nèi)容為bytes。如果你想要傳遞文本,則需要encoding一下,一般為UTF8。

routing-key是headers的一種標準形式。Broker通過routing-key去將message匹配到queue上。每個隊列都會指定一個“綁定鍵”,一旦這個綁定鍵匹配到了routing-key的規(guī)則,則隊列就會接收消息。

AMQP的Exchange type 有四種(翻譯是四種,一般做3種)

1?Direct : 綁定key必須完全匹配routing key,并且不支持通配符

2?Topic :與Direct 類型相似,但是支持通配符 '#'可以匹配0到多個word, '.'號只支持一個word?

3?Fanout:?忽略routing-key 和 綁定鍵,所有發(fā)布的消息都會去綁定到隊列上

4?Headers:?

例如:

一個發(fā)布者發(fā)送一條message,message的routing-key 為"NYSE",exchange類型為topic,此時消費者創(chuàng)建了一個隊列“Stocks”,binding key 為 “#”,"."或者"NYSE",都可以匹配到這條消息,如果該消息的exchange類型為Direct,只有binding key 為 "NYSE"的消費者可以消費這條消息。

一個隊列也可以綁定到多個Exchange上,我們來看看這種場景:

翻譯不動了

未完待續(xù)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 16,211評論 2 11
  • 什么叫消息隊列? 消息(Message)是指在應用間傳送的數(shù)據(jù)。消息可以非常簡單,比如只包含文本字符串,也可以更復...
    Agile_dev閱讀 2,442評論 0 24
  • RabbitMQ 簡介 MQ 消息隊列,上承生產(chǎn)者,下接消費者。從生產(chǎn)者側(cè)獲取消息,然后將消息轉(zhuǎn)發(fā)給消費者。由此可...
    2205閱讀 3,663評論 1 11
  • 利用RabbitMQ集群橫向擴展能力,均衡流量壓力,讓消息集群的秒級服務能力達到百萬,Google曾做過此類實驗;...
    有貨技術閱讀 3,625評論 0 1
  • 在第一次做自己從未做過的事時,緊張了又緊張,總以為自己做不好,這樣做不好,那樣做不好,想想都覺得搞笑,這么多年了,...
    希雅的花園閱讀 412評論 0 0

友情鏈接更多精彩內(nèi)容