一、RabbitMQ原理圖
二、RabbitMQ基礎組件
1,Messge
消息,由消息頭和消息體組成。消息體是不透明的,消息頭由一些列可選屬性組成,這些屬性包括:routing-key(路由鍵)、priority(優先級)、delivery-mode(消息是否可持久性存儲)。
2,Publisher
消息的生產者,也是一個向交換器發布消息的客戶端應用程序。
3,Consumer
消息的消費者,表示一個從消息隊列中取得消息的客戶端程序。
4,Exchange
交換器,用來接收生產者發送的消息,並將這些消息路由給服務器中的隊列。
三種常見的交換器:direct(發布與訂閱,完全匹配)、fanout(廣播)、topic(主題,規則匹配)
5,Binding
綁定,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器與消息隊列連接起來的路由規則,所以可以將交換器理解成一個由綁定構成的路由表。
6,Queue
消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息可以投入一個或多個隊列。消息一直在隊列里面,等待消費者連接到這個隊列取走消息。
7,Routing-key
路由鍵,RabbitMQ決定消息該投遞到哪個隊列的規則。隊列通過路由鍵綁定到交換器。消息發送到MQ服務器時,消息擁有一個路由鍵,即便是空的,RabbitMQ也會將其和綁定使用的路由鍵進行匹配。如果相匹配,消息會投遞到該隊列,如果不匹配,消息將會進入黑洞。
8,Connection
鏈接,指rabbitMQ服務器和服務建立的TCP連接。
9,Channel
信道,是TCP里面的虛擬連接。例如,電纜相當於TCP,信道是一個獨立的光纖束,一條TCP連接上創建多條信道是沒有問題的。TCP一旦打開,就會創建AMQP信道,無論發布消息、接受消息、訂閱隊列,這些動作都是通過信道完成的。
10,Virtual Host
虛擬主機,表示一批交換機,消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器。每個virtualhost本質上就是一個mini版的RabbitMQ服務器,擁有自己的隊列、交換器、綁定和權限機制。vhost是AMQP概念的基礎,必須在連接時指定,RabbitMQ默認的vhost是/。
11,Broker
表示消息隊列服務器實體。
三、RabbitMQ組件相關知識
1,交換器和隊列的關系
交換器是通過路由鍵和隊列綁定在一起的,如果消息擁有的路由鍵跟隊列和交換器路由鍵匹配,那么消息就會被路由到該綁定的隊列中。
也就是說,消息到隊列的過程,消息首先會經過交換器,接下來交換器再通過路由鍵分發消息到具體的隊列中。
路由鍵可以理解為匹配的規則。
2,RabbitMQ使用信道而不是直接使用TCP通信的原因
TCP的創建和銷毀開銷特別大,創建需要3次握手,銷毀需要4次揮手。如果不用信道,那么應用程序就會以TCP連接到RabbitMQ,高峰時每秒成千上萬條連接會造成資源的巨大浪費,而且操作系統每秒處理TCP連接數也是有限制的,必定造成性能瓶頸。
信道的原理是一條線程一條信道,多條線程多條信道同用一條TCP連接。一條TCP連接可以容納無線信道即使每秒成千上萬的請求也不會成為性能的瓶頸。