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