rabbitmq(二)原理
一.基本概念
1.1
可以看到提供方提供一個Broker(消息隊列實體)當中的虛擬主機->>包含了Exchange(交換器)通過binding綁定一個隊列Queue 客戶端再通過連接不同渠道(Channel)給客戶端提供消息
而一個消息隊列又分幾種模式
1.2
VirtualHost
虛擬主機。表示一批交換器,消息隊列和相關對象。虛擬主機是共享相同的身份認證
和加密環境的獨立服務器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 服務器,擁有
自己的隊列、交換器、綁定和權限機制。vhost 是 AMQP 概念的基礎,必須在鏈接時指定,
RabbitMQ 默認的 vhost 是/
1.3
Channel 信道。
1,Channel 中文叫做信道,是 TCP 裏面的虛擬鏈接。例如:電纜相當於 TCP,信道是
一個獨立光纖束,一條 TCP 連接上創建多條信道是沒有問題的。
2,TCP 一旦打開,就會創建 AMQP 信道。
3,無論是發布消息、接收消息、訂閱隊列,這些動作都是通過信道完成的。
1.4
交換器和隊列的
交換器是通過路由鍵和隊列綁定在一起的,如果消息擁有的路由鍵跟隊列和交換器的
路由鍵匹配,那麽消息就會被路由到該綁定的隊列中。
也就是說,消息到隊列的過程中,消息首先會經過交換器,接下來交換器在通過路由
鍵匹配分發消息到具體的隊列中。
路由鍵可以理解為匹配的規則。
1.5 RabbitMQ 為什麽需要信道?為什麽不是 TCP 直接通
- TCP 的創建和銷毀開銷特別大。創建需要 3 次握手,銷毀需要 4 次分手。
- 如果不用信道,那應用程序就會以 TCP 鏈接 Rabbit,高峰時每秒成千上萬條鏈接
會造成資源巨大的浪費,而且操作系統每秒處理 TCP 鏈接數也是有限制的,必定造成性能
瓶頸。 - 信道的原理是一條線程一條通道,多條線程多條通道同用一條 TCP 鏈接。一條 TCP
鏈接可以容納無限的信道,即使每秒成千上萬的請求也不會成為性能的瓶頸。
1.Direct(發布訂閱 完全匹配)
rabbitmq默認隊列
如圖 Direct是根據交換器的routing key找到queues的
所以我們使用的時候消息接收就使用交換器名稱,以及routingkey找到隊列接收值
2.fanoutg(廣播)
通過發送Exchange 將消息發送到所有綁定的隊列中 所有連接到exchange的客戶端 都會收到消息
3.topic
生產隊列發送消息根據topic類型 發送到交換器 匹配幾種相同的binding key 發送到隊列 客戶端消費
rabbitmq(二)原理