消息交換模式RabbitMQ簡介
RabbitMQ是AMQP的一個典型實現(xiàn),它消息發(fā)布者的消息發(fā)布到Exchange上,同時需要制定routingkey,可以通過指定交換機的不同模式實現(xiàn)不同的行為。
RabbitMQ提供了四種Exchange:fanout,direct,topic和header。其中header模式在實際使用中較少,本文只對前三種模式進行比較。
Direct模式(點對點通訊):
Direct Exchange是RabbitMQ默認的交換機模式,也是最簡單的模式,根據(jù)key全文匹配去尋找隊列。規(guī)則如下:
發(fā)布到exchange的消息通過routingkey的完全匹配發(fā)布到queue上。如果routingkey不存在,則丟棄
點對點方式是最為傳統(tǒng)和常見的通訊方式,它支持一對一、一對多、多對多、多對一等多種配置方式,支持樹狀、網(wǎng)狀等多種拓撲結(jié)構(gòu)。
fanout模式(多點廣播):
fanout模式比較簡單,廣播式的,無視routingkey直接發(fā)送給所有的queue
Topic模式(發(fā)布/訂閱):
任何發(fā)送到Topic Exchange的消息都會被轉(zhuǎn)發(fā)到所有關(guān)心RouteKey中指定話題的Queue上
這種模式較為復雜,簡單來說,就是每個隊列都有其關(guān)心的主題,所有的消息都帶有一個"標題"(RouteKey),Exchange會將消息轉(zhuǎn)發(fā)到所有關(guān)注主題能與RouteKey模糊匹配的隊列。
這種模式需要RouteKey,也許要提前綁定Exchange與Queue。
在進行綁定時,要提供一個該隊列關(guān)心的主題,如"#.log.#"表示該隊列關(guān)心所有涉及l(fā)og的消息(一個RouteKey為"MQ.log.error"的消息會被轉(zhuǎn)發(fā)到該隊列)。
"#"表示0個或若干個關(guān)鍵字,""表示一個關(guān)鍵字。如"log."能與"log.warn"匹配,無法與"log.warn.timeout"匹配;但是"log.#"能與上述兩者匹配。
同樣,如果Exchange沒有發(fā)現(xiàn)能夠與RouteKey匹配的Queue,則會拋棄此消息。
到此這篇關(guān)于消息交換模式RabbitMQ的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Elasticsearch索引的分片分配Recovery使用講解
這篇文章主要為大家介紹了Elasticsearch索引的分片分配Recovery使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04