柚子快報(bào)激活碼778899分享:分布式 RabbitMQ
柚子快報(bào)激活碼778899分享:分布式 RabbitMQ
1、AMQP簡(jiǎn)介
AMQP(Advanced Message Queuing Protocol 高級(jí)消息隊(duì)列協(xié)議)是一種開放的消息隊(duì)列協(xié)議,用于在應(yīng)用程序之間進(jìn)行可靠的消息傳遞。此協(xié)議還支持多種編程語言和平臺(tái),使得不同系統(tǒng)之間的通信變得更加靈活和可靠。
2、RabbitMQ簡(jiǎn)介
RabbitMQ是一個(gè)開源的消息隊(duì)列中間件,它實(shí)現(xiàn)了高度可靠、靈活和可擴(kuò)展的消息傳遞模型。
RabbitMQ是由支持高并發(fā)的erlang語言開發(fā),它實(shí)現(xiàn)了 AMQP(高級(jí)消息隊(duì)列協(xié)議)。
3、RabbitMQ架構(gòu)
生產(chǎn)者(Producer):向消息隊(duì)列發(fā)布消息的客戶端。
消費(fèi)者(Consumer):從消息隊(duì)列消費(fèi)消息的客戶端。
消息(Message):消息由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括priority(消息優(yōu)先權(quán))、delivery-mode(是否持久化)等。
路由鍵(Routing Key): 是在消息發(fā)布時(shí)與消息一起發(fā)送的一個(gè)屬性,用于將消息路由到指定隊(duì)列中。路由鍵最大長(zhǎng)度255個(gè)字節(jié)。
交換機(jī)(Exchange):交換機(jī)負(fù)責(zé)接收生產(chǎn)者發(fā)送的消息并將這些消息按照路由規(guī)則轉(zhuǎn)發(fā)到對(duì)應(yīng)的消息隊(duì)列。交換機(jī)用于轉(zhuǎn)發(fā)消息,它不會(huì)存儲(chǔ)消息,如果沒有Queue綁定到Exchange的話,它會(huì)直接丟棄掉Producer發(fā)送過來的消息。
隊(duì)列(Queue):存儲(chǔ)消息的隊(duì)列。
綁定(Binding):用于建立Exchange和Queue之間的關(guān)聯(lián)。一個(gè)綁定就是基于Binding Key將Exchange和Queue連接起來的路由規(guī)則,所以可以將交換機(jī)理解成一個(gè)由Binding構(gòu)成的路由表。
連接(Connection):客戶端與消息隊(duì)列RabbitMQ間的物理TCP連接。
信道(Channel):連接里的虛擬通道,每個(gè)連接里可建立多個(gè)信道,每個(gè)Channel代表一個(gè)會(huì)話任務(wù)。發(fā)布消息、接收消息、訂閱隊(duì)列等都是通過信道進(jìn)行的。
代理(Broker):消息隊(duì)列服務(wù)進(jìn)程,即RabbitMQ Server。
虛擬主機(jī)(Virtual Host):基于多租戶和安全因素設(shè)計(jì),本質(zhì)上是一個(gè)mini版的RabbitMQ Server。一個(gè)RabbitMQ Server可以分出多個(gè)vhost,每個(gè)vhost擁有自己的隊(duì)列、交換機(jī)和綁定,vhost共享相同的身份認(rèn)證和加密環(huán)境。vhost是AMQP的基礎(chǔ),必須在連接時(shí)指定,RabbitMQ默認(rèn)的vhost是/。
為什么不直接使用連接通信,而是使用信道? 1、TCP的創(chuàng)建和銷毀開銷特別大。創(chuàng)建需要3次握手,銷毀需要4次分手; 2、高峰時(shí)大量TCP連接會(huì)造成資源巨大浪費(fèi),而且操作系統(tǒng)每秒處理TCP連接數(shù)也是有限制的,必定造成性能瓶頸; 3、信道的原理是一個(gè)線程一條通道,多個(gè)線程多條通道并同用一條TCP連接。一條TCP連接可以容納無限的信道,即使每秒成千上萬的請(qǐng)求也不會(huì)成為性能瓶頸。
4、RabbitMQ的5種消息模型
4.1 基本消息模型
生產(chǎn)者->1個(gè)隊(duì)列->1個(gè)消費(fèi)者生產(chǎn)者發(fā)布消息到隊(duì)列。消費(fèi)者監(jiān)聽隊(duì)列,如果隊(duì)列中有消息就消費(fèi)掉,消息被消費(fèi)后就自動(dòng)從隊(duì)列中刪除。
4.2 Work消息模型
生產(chǎn)者->1個(gè)隊(duì)列->多個(gè)消費(fèi)者生產(chǎn)者發(fā)布消息到隊(duì)列。多個(gè)消費(fèi)者同時(shí)監(jiān)聽同一個(gè)隊(duì)列,共同消費(fèi)隊(duì)列中的消息,一個(gè)消息只會(huì)被1個(gè)消費(fèi)者消費(fèi)。可以設(shè)置多個(gè)消費(fèi)者平均消費(fèi)消息,也可以設(shè)置為能者多勞。平均消費(fèi)問題:消費(fèi)者1比消費(fèi)者2的效率低、耗時(shí)更長(zhǎng),但是它們最終消費(fèi)的消息數(shù)量是一樣的,就會(huì)出現(xiàn)消費(fèi)者2大量時(shí)間處于空閑狀態(tài),消費(fèi)者1一直忙碌,導(dǎo)致整體效率變低。
4.3 Publish/Subscribe - fanout(發(fā)布訂閱消息模型 - 廣播模式)
生產(chǎn)者->1個(gè)交換機(jī)->多個(gè)隊(duì)列->多個(gè)消費(fèi)者每個(gè)隊(duì)列都要綁定到交換機(jī)(Exchange)。生產(chǎn)者發(fā)布消息到交換機(jī),交換機(jī)把消息轉(zhuǎn)發(fā)給綁定過的所有隊(duì)列。每個(gè)隊(duì)列的消費(fèi)者都能消費(fèi)消息,實(shí)現(xiàn)一條消息被多個(gè)消費(fèi)者消費(fèi)。
4.4 Publish/Subscribe - direct(發(fā)布訂閱消息模型 - 定向路由模式)
生產(chǎn)者->1個(gè)交換機(jī)->多個(gè)隊(duì)列->多個(gè)消費(fèi)者每個(gè)隊(duì)列都要綁定到交換機(jī)(Exchange),但不能任意綁定,而是要指定一個(gè)RoutingKey。生產(chǎn)者發(fā)布消息到交換機(jī),在布送消息時(shí),必須指定一個(gè)RoutingKey。交換機(jī)會(huì)把消息轉(zhuǎn)發(fā)給與RoutingKey完全匹配的隊(duì)列。監(jiān)聽隊(duì)列的消費(fèi)者消費(fèi)消息。
4.5 Publish/Subscribe - topic(發(fā)布訂閱消息模型 - 主題路由模式)
生產(chǎn)者->1個(gè)交換機(jī)->多個(gè)隊(duì)列->多個(gè)消費(fèi)者每個(gè)隊(duì)列都要綁定到交換機(jī)(Exchange),但不能任意綁定,而是要指定一個(gè)RoutingKey。與direct不同的是topic類型的RoutingKey可以使用通配符。通配符規(guī)則:#(匹配一個(gè)或多個(gè)單詞),*(匹配1個(gè)單詞),多個(gè)單詞間以“.”分隔。生產(chǎn)者發(fā)布消息到交換機(jī),在布送消息時(shí),必須指定一個(gè)RoutingKey。交換機(jī)會(huì)把消息轉(zhuǎn)發(fā)給與RoutingKey完全匹配的隊(duì)列。監(jiān)聽隊(duì)列的消費(fèi)者消費(fèi)消息。
柚子快報(bào)激活碼778899分享:分布式 RabbitMQ
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。