rabbitMQ組成部分
rabbitmq有以下組成部分,分別為:
1. Server(broker)
接受客戶端連接,實現AMQP消息隊列和路由功能的進程
2.虛擬主機virtual host
虛擬主機類似於權限控制組,控制用戶訪問虛擬主機的權限。
權限控制最小的粒度是virtual host
3. 交換機exchange
交換機相當於一個具有獨立進程的應用程序
接受生產者發送的消息,並根據Binding規則將消息路由給服務器中隊列。
它具有一個路由表,即以key路由鍵-value路由,形式存儲的表
4. 消息隊列queue
隊列,也就是存放消息的容器,遵循先進先出的規則
5. 消息Message
由Header和Body組成,Header是生產者添加的各種屬性的集合,包括消息被那個Message Queue接受,優先級等屬性,
body是需要傳輸的數據
6. 綁定binding,也叫路由規則
聯系Exchange和Message Queue
7. connection連接
客戶端與RabbitMQ server(broker)之間的TCP連接
8. Channel信道
客戶端與broker在TCP連接后,需要為Connection創建Channel,AMQP協議規定只有Channel才能執行AMQP的命令。
一個Connection對多個Channel。建議客戶端線程之間不要共用Channel,
至少要保證共用的Channel的線程發送消息必須是串行的,建議盡量共用Connection
9. AMQP命令
客戶端通過Command命令完成與AMQP服務器的交互來實現自身的邏輯。
如通過publish命令發送消息,txSelect開啟一個事務,txCommit提交一個事務。
note:
Exchange和多個Message Queue發生binding后形成一張路由表
當Exchange接收到Message時會解析其Header得到Routing Key,
Exchange根據Routing Key與Exchange Type將Message路由到Message Queue
Binding key由消費者在綁定Exchange和Message Queue時指定
Routing Key由Producer發送Message時指定,兩者匹配方式由Exchange Type決定
ExchangeType三種類型:
三種類型分別為:
1. direct直接交換機
將交換機和隊列進行綁定,當生產者producer發送消息到隊列時,通過消息header中攜帶的Routing Key與隊列進行匹配再放到隊列中。
允許隊列與交換機綁定的鍵名相同,即下圖都是鍵一時,生產者生產的消息會同時發送到隊列一和隊列二。
2. Fanout廣播式交換機
交換機與隊列進行綁定,沒有路由key,只要隊列跟交換機綁定,生產者發布的消息會發不到所有隊列中
3. Topic主題式交換機
與Direct直接交換類似,隊列與交換機綁定的key方式使用模式匹配方式綁定
綁定的關鍵字(key)用另個或多個標記構成,每個標記之間用"."間隔
*號匹配一個詞組,#號匹配零個或多個詞組
上面三種交換模式,個人覺得第一種direct直接交換方式比較好用。
AMQP協議棧:
1. Module Layer
定義了一些供客戶端調用的命令,客戶端可以利用這些命令實現自己的業務邏輯,
例如,客戶端可以通過queue.declare聲明一個隊列,利用consume命令獲取一個隊列中的消息。
2. Session Layer
主要負責將客戶端的命令發送給服務器,在將服務器端的應答返回給客戶端
主要為客戶端與服務器之間通信提供可靠性、同步機制和錯誤處理。
3.Transport Layer
主要傳輸二進制數據流,提供幀的處理、信道復用、錯誤檢測和數據表示。
參考資料來源:
RabbitMQ的幾種典型使用場景(https://www.cnblogs.com/luxiaoxun/p/3918054.html)
RabbitMQ的組成、原理、安裝、和eclipse的整合(https://blog.csdn.net/hongye301/article/details/85042781)