目錄
- 概述
- AMQP協(xié)議
- AMQP協(xié)議重要角色
- Docker安裝RabbitMQ
概述
不管是微服務(wù)還是分布式的系統(tǒng)架構(gòu)中,消息隊列中間件都是不可缺少的一個重要環(huán)節(jié),主流的消息隊列中間件有RabbitMQ、RocketMQ等等,從這篇開始詳細(xì)介紹以RabbitMQ為代表的消息隊列中間件。
AMQP協(xié)議
- AMQP協(xié)議是一個提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同開發(fā)語言等條件的限制。
- AMQP協(xié)議是一種二進(jìn)制協(xié)議,提供客戶端應(yīng)用與消息中間件之間的異步、安全、高效的交互。
- AMQP作為中間層服務(wù),把消息生產(chǎn)和消費分隔開來,當(dāng)消費者產(chǎn)生出現(xiàn)異常,不影響消費者對消息的消費,當(dāng)消費者異常時,生產(chǎn)者生產(chǎn)的消息可以存放到服務(wù)的內(nèi)存或者磁盤,不會影響想消費的速率,同時,消息也可以基于路由的規(guī)則可以投遞到指定的消費者消費。
AMQP協(xié)議重要角色
1.生產(chǎn)者和消費者
- 生產(chǎn)者是生產(chǎn)消息的主體,消費者是消費消息的主體
- 數(shù)據(jù)集成與系統(tǒng)解耦、異步處理與事件驅(qū)動、流量薛峰、事務(wù)消息與分布式事務(wù)的最終一致
- 生產(chǎn)者生產(chǎn)一條消息丟給消息代理,消息代理根據(jù)投遞規(guī)則將消息傳到消費者手上
2.交換機
- 交換機就像是消息代理的路由器,負(fù)責(zé)拿到一個消息之后,根據(jù)確定的規(guī)則(路由鍵)將它路由給一個或零個隊列,交換機具備多種路由模式。
- 基于消息生產(chǎn)者和路由規(guī)則可以將消息投遞到指定的Message Queue,交換機收到生產(chǎn)者投遞的消息,基于路由規(guī)則及隊列綁定關(guān)系匹配到投遞對應(yīng)的交換機或者隊列進(jìn)行分發(fā),交換機不存儲消息,只做轉(zhuǎn)發(fā)
交換機類型:
- 直連交換機:根據(jù)路由鍵完全匹配的投遞到對應(yīng)的隊列
- 扇形交換機:無視路由鍵,將消息進(jìn)行拷貝,并路由到給綁定到它身上所有隊列,提供了一個廣播的效果。
- 主題交換機:根據(jù)路由鍵按模式匹配的投遞到對應(yīng)的隊列
- 交換機也具備自己的屬性,可以定義自己的名字,是否持久化等選項。
3.隊列
- 隊列是消息的暫存地,至少有一個消費者訂閱了隊列的話,消息會立即發(fā)送給這些訂閱的消費者,但是如果消息到達(dá)了無人的訂閱隊列,消息會在隊列中等待,等待有了消費者便進(jìn)行分發(fā)。
- Exchange和Message Queue之間存在綁定關(guān)系,消息到了Exchange 后基于路由策略可以將消息投遞到已綁定且符合路由策略的Message Queue。
- 消息隊列會將消息存儲到內(nèi)存或者是磁盤中,并將這些消息按照一定順序轉(zhuǎn)發(fā)給一個或多個消費者,每個消息隊列都是獨立隔離的,相互不影響。
- 消息隊列具有不同的屬性(私有、共享、持久化、臨時、客戶端定義或者服務(wù)端定義等)),可以基于實際需求選擇對應(yīng)的類型
4.消息
- 消息是信息的載體,也是AMQP協(xié)議的一個實體,消息包含兩部分
- 載荷:就是真正的信息,是你想要傳輸?shù)娜魏蝺?nèi)容,該部分內(nèi)容對消息代理來說是透明的
- 元信息:包含路由鍵、內(nèi)容類型、編碼、是否持久化等消息屬性,會被消息代理所解析,消息代理根據(jù)消息的屬性對這條消息進(jìn)行投遞,存儲等,這部分被消息代理所關(guān)系,而消費者對其是不關(guān)心的。
5.信道
- 網(wǎng)絡(luò)信道,是建立在Connection鏈接之上的一種輕量級的鏈接,幾乎所有的操作都在Channel中進(jìn)行,Channel是進(jìn)行消息讀寫的通道,客戶端可以建立對各Channel,每個Channel代表一個會話任務(wù)。
- 一個Connection上可以創(chuàng)建任意數(shù)量的Channel
Docker安裝RabbitMQ
1.查看Docker倉庫里的RabbitMQ鏡像
# 查詢鏡像 docker search rabbitmq # 下載鏡像 docker pull rabbitmq
2.啟動MQ安裝management
如果在云服務(wù)上部署需在安全組開通一下端口:15672(UI頁面通信口)、5672(client端通信口)、25672(server間內(nèi)部通信口)、61613(stomp 消息傳輸)、1883(MQTT消息隊列遙測傳輸)。
docker run -d --name rabbit -e \ RABBITMQ_DEFAULT_USER=stark -e RABBITMQ_DEFAULT_PASS=1990@stark -p 15672:15672 \ -p 5672:5672 \ -p 25672:25672 \ -p 61613:61613 \ -p 1883:1883 rabbitmq:management
使用 http://127.0.0.1:15672
訪問,賬號和密碼就是參數(shù)RABBITMQ_DEFAULT_USER
和RABBITMQ_DEFAULT_PASS
設(shè)置的值。
以上就是 Docker安裝RabbitMQ、AMQP協(xié)議、和主要角色的詳細(xì)內(nèi)容,更多關(guān)于 Docker安裝RabbitMQ的資料請關(guān)注其它相關(guān)文章!