AMQP協(xié)議
AMQP(高級(jí)消息隊(duì)列協(xié)議)是一個(gè)能讓符合統(tǒng)一標(biāo)準(zhǔn)的客戶端和中間件進(jìn)行消息傳輸?shù)南f(xié)議。是RabbitMQ主要實(shí)現(xiàn)支持的協(xié)議的一種。
涉及到的相關(guān)概念的介紹
publisher:發(fā)送消息到broker的客戶端。
receiver:接受broker發(fā)來(lái)的消息的客戶端。
AMQP消息模型
Publisher發(fā)送到broker的消息,首先被發(fā)到了broker中的Exchanges,Exchanges根據(jù)被稱作bindings的規(guī)則,將消息的拷貝發(fā)送到對(duì)應(yīng)的queues中,然后broker會(huì)將queues中的消息發(fā)送到訂閱相應(yīng)queues的consumer。

Exchanges,bindings和queues被統(tǒng)稱為amqp的實(shí)體
Excange and Exchange Types
pulisher實(shí)際是發(fā)送消息到broker中的Exchanges,然后Exchanges將消息路由到對(duì)應(yīng)的queues。路由規(guī)則是由Exchange type和bindings來(lái)決定的。
Exchange Types
| Name | Default pre-declared names |
|---|---|
| Direct exchange | (Empty string) and amq.direct |
| Fanout exchange | amq.fanout |
| Topic exchange | amq.topic |
| Headers exchange | amq.match (and amq.headers in RabbitMQ) |
在聲明Exchange時(shí),除了可以指定Exchange Type,還可以指定一些其它的屬性:
- Name
- Durability (定義Exchange是永久還是臨時(shí)的,臨時(shí)性的Exchange在broker重啟后就會(huì)消失)
- Auto-delete (定義這個(gè)屬性后,當(dāng)沒(méi)有任何queue和此Exchange綁定時(shí),此Exchange會(huì)被自動(dòng)刪除)
- Arguments (optional, used by plugins and broker-specific features)
Default Exchange
default exchange 是被broker預(yù)先聲明的name為空的direct exchange。
當(dāng)使用default exchange 時(shí),我們聲明一個(gè)名為"xxxxx"的queue,這個(gè)queue會(huì)以值為"xxxxx"的route-key綁定到default exchange。(即聲明的queue會(huì)自動(dòng)以queue name作為routing key綁定)
Direct Exchange
direct exchange根據(jù)消息的routing key將消息發(fā)送給相應(yīng)的queue。
direct exchange對(duì)用于將任務(wù)循環(huán)分配給多個(gè)worker的場(chǎng)景。消息會(huì)被負(fù)載均衡到多個(gè)consumer,不是負(fù)載均衡到多個(gè)queue。

自己理解的完整消息轉(zhuǎn)發(fā)流程
在exchange type 為direct的情況下,broker會(huì)把匹配上routing_key的消息完整的發(fā)送給每一個(gè)合適的queue里,然后queue會(huì)將消息均衡到綁定到器上的

Fanout Exchange
broker會(huì)把發(fā)送到fanout exchange的消息轉(zhuǎn)發(fā)給所有綁定到此exchange的queue,不會(huì)去匹配routing key。

Topic Exchange

Headers Exchange
headers exchange 通過(guò)消息頭部的屬性而不是routing_key進(jìn)行消息路由。

java客戶端代碼開發(fā)示例
主要接口和方法
Exchange 聲明
exchangeDeclare(String exchange, BuiltinExchangeType type,boolean durable, boolean autoDelete):聲明non-autodelete, non-durable
DIRECT

服務(wù)端安裝和配置
安裝(ubuntu14.04)
直接通過(guò)apt repository進(jìn)行安裝
echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-server
** 安裝相關(guān)問(wèn)題參考地址:http://http://www.rabbitmq.com/install-debian.html **