java學習-消息隊列rabbitmq的組成

rabbitMQ組成部分

rabbitmq有如下組成部分,分別爲:html

1. Server(broker)
接受客戶端鏈接,實現AMQP消息隊列和路由功能的進程服務器

2.虛擬主機virtual host
虛擬主機相似於權限控制組,控制用戶訪問虛擬主機的權限。
權限控制最小的粒度是virtual hosteclipse

3. 交換機exchange
交換機至關於一個具備獨立進程的應用程序
接受生產者發送的消息,並根據Binding規則將消息路由給服務器中隊列。
它具備一個路由表,即以key路由鍵-value路由,形式存儲的表.net

4. 消息隊列queue
隊列,也就是存放消息的容器,遵循先進先出的規則線程

5. 消息Message
由Header和Body組成,Header是生產者添加的各類屬性的集合,包括消息被那個Message Queue接受,優先級等屬性,
body是須要傳輸的數據server

6. 綁定binding,也叫路由規則
聯繫Exchange和Message Queuehtm

7. connection鏈接
客戶端與RabbitMQ server(broker)之間的TCP鏈接blog

8. Channel信道
客戶端與broker在TCP鏈接後,須要爲Connection建立Channel,AMQP協議規定只有Channel才能執行AMQP的命令。
一個Connection對多個Channel。建議客戶端線程之間不要共用Channel,
至少要保證共用的Channel的線程發送消息必須是串行的,建議儘可能共用Connectionrabbitmq

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)

相關文章
相關標籤/搜索