rabbitmq 幾種應用模式解釋

一、Hello Word模式html

Hello Word模式他會發送數據到空字符的交換機,這種交換機很特殊,它容許咱們準確地指定消息應該去哪一個隊列。須要在routing_key參數中指定隊列名稱。網站

二、Work Queues模式ui

Work Queues模式其實就是在Hello Word模式變成了多個消費者,不會消費同一條消息。.net

三、Publish/Subscribe模式(fanout模式)htm

Publish/Subscribe模式其實就是將隊列綁定到交換機,數據進入交換機而後在決定進入哪一個隊列,綁定2個就會進入2個隊列,相似廣播性質。此模式也就是Exchange模式中的fanout模式。blog

上圖中,生產者(P)發送到Exchange(X)的全部消息都會路由到圖中的兩個Queue,並最終被兩個消費者(C1與C2)消費。rabbitmq

四、Routing模式隊列

Routing模式它會把消息路由到那些binding key與routing key徹底匹配的Queue中,此模式也就是Exchange模式中的direct模式。路由

以上圖的配置爲例,咱們以routingKey="error"發送消息到Exchange,則消息會路由到Queue1(amqp.gen-S9b…,這是由RabbitMQ自動生成的Queue名稱)和Queue2(amqp.gen-Agl…)。若是咱們以routingKey="info"或routingKey="warning"來發送消息,則消息只會路由到Queue2。若是咱們以其餘routingKey發送消息,則消息不會路由到這兩個Queue中。文檔

五、Topics模式

Topics模式與Routing模式比較相近,routing key爲一個句點號「. 」分隔的字符串(咱們將被句點號「. 」分隔開的每一段獨立的字符串稱爲一個單詞),binding key與routing key同樣也是句點號「. 」分隔的字符串。binding key中能夠存在兩種特殊字符「*」與「#」,用於作模糊匹配,其中「*」用於匹配一個單詞,「#」用於匹配多個單詞(能夠是零個)。

以上圖中的配置爲例,routingKey=」quick.orange.rabbit」的消息會同時路由到Q1與Q2,routingKey=」lazy.orange.fox」的消息會路由到Q1與Q2,routingKey=」lazy.brown.fox」的消息會路由到Q2,routingKey=」lazy.pink.rabbit」的消息會路由到Q2(只會投遞給Q2一次,雖然這個routingKey與Q2的兩個bindingKey都匹配);routingKey=」quick.brown.fox」、routingKey=」orange」、routingKey=」quick.orange.male.rabbit」的消息將會被丟棄,由於它們沒有匹配任何bindingKey。

六、RPC模式

這個模式不多用,也很少作解釋了,就是一個請求隊列一個回調隊列,具體參考官方網站或者其餘博客吧。

 

交換機4種模式中還有一種模式沒敘述,就是headers模式:

headers類型的Exchange不依賴於routing key與binding key的匹配規則來路由消息,而是根據發送的消息內容中的headers屬性進行匹配。

在綁定Queue與Exchange時指定一組鍵值對;當消息發送到Exchange時,RabbitMQ會取到該消息的headers(也是一個鍵值對的形式),對比其中的鍵值對是否徹底匹配Queue與Exchange綁定時指定的鍵值對;若是徹底匹配則消息會路由到該Queue,不然不會路由到該Queue。

fanout,direct,topicexchange的routingKey都須要要字符串形式的,而headers exchange則沒有這個要求,由於鍵值對的值能夠是任何類型 ,匹配有兩種方式all和any。這兩種方式是在接收端必需要用鍵值"x-mactch"來定義。all表明定義的多個鍵值對都要知足,而any則代碼只要知足一個就能夠了

 

 

參考文檔:

http://www.rabbitmq.com/getstarted.html

https://www.cnblogs.com/Black-Cobra/p/8926244.html

https://www.2cto.com/kf/201807/764225.html

https://blog.csdn.net/qq_40673786/article/details/90344169

相關文章
相關標籤/搜索