日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ 入门:2. Exchange 和 Queue

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ 入门:2. Exchange 和 Queue 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上文RabbitMQ 入門(mén):1. Message Broker(消息代理)提到過(guò) RabbitMQ 實(shí)現(xiàn)了 AMQP 這個(gè)協(xié)議(RabbitMQ 所支持的 AMQP 的版本是 0.9.1),這個(gè)協(xié)議的內(nèi)容很多,但為了構(gòu)建入門(mén)級(jí)的分布式應(yīng)用,我們只需要了解以下幾點(diǎn)即可。

?

在最簡(jiǎn)單的場(chǎng)景下,RabbitMQ 的架構(gòu)示意圖大致如下:

  • 首先某個(gè)消息從發(fā)布者那里發(fā)往 ? ? RabbitMQ

  • 這個(gè)消息需要聲明一個(gè) Exchange(也可以翻譯成交換機(jī)),并被發(fā)往這個(gè) ? ? Exchange

    • Exchange ? ? ?有點(diǎn)類(lèi)似“暫存區(qū)”,消息都會(huì)發(fā)往 Exchange。用個(gè)類(lèi)比來(lái)說(shuō):Exchange ? ? ?就像郵箱一樣,我們寫(xiě)的信件首先都要放到郵箱里才能進(jìn)行發(fā)送。

  • 然后,Exchange ? ? 將使用消息內(nèi)的一些信息以及它自己的配置來(lái)決定一條或多條發(fā)送消息的路由。

  • 這些路由都通向一個(gè) Queue(隊(duì)列),消息會(huì)存儲(chǔ)在這個(gè) Queue 里,等待消息的接收者來(lái)進(jìn)行使用。

  • 一個(gè)消息的接收者可以使用 Queue 中的信息。一旦確認(rèn)這個(gè)消息被傳遞成功,那么它將從 Queue 中被刪除。

    • RabbitMQ ? ? ?所提供的松耦合的特性,主要是因?yàn)?/span> Exchange Queue 的分離。

    • 繼續(xù)使用郵箱的類(lèi)比,Queue 就相當(dāng)于是接收信件的郵箱。而根據(jù)郵件地址,郵件系統(tǒng)會(huì)選擇不同的郵箱來(lái)接收郵件。

?

而由于 RabbitMQ 處理的是消息,而不是信件,所以它的選項(xiàng)會(huì)更多:RabbitMQ 一共有 4 Exchange

  • Direct Exchange。它是默認(rèn)的 Exchange 。它會(huì)把消息發(fā)送到一個(gè)接收者。如果注冊(cè)了多個(gè)接收者來(lái)監(jiān)聽(tīng)同樣的路由 Key,那么 ? ? RabbitMQ 將會(huì)向每個(gè) Queue 輪流發(fā)送一條消息,相當(dāng)于提供了一個(gè)簡(jiǎn)單的負(fù)載均衡

  • Fanout Exchange 它把消息的副本發(fā)送到每個(gè)綁定到該 ? ? Exchange Queue 上面。而這里的 Queue 沒(méi)有辦法對(duì)消息進(jìn)行過(guò)濾,如果需要過(guò)濾,則需要在消息接收者那里實(shí)現(xiàn)。

  • Topic Exchange。它和 Direct Exchange 類(lèi)似,但不同的是:每個(gè)消息接收者監(jiān)聽(tīng)特定的路由 Key,它們會(huì)收到消息的副本。

    • 例如聊天室就可以使用 Topic ? ? ?Exchange。每個(gè)聊天室的 ID 可以作為路由 Key,這樣就可以保證消息只會(huì)發(fā)送給同一個(gè)聊天室的其他參與者。

  • Headers Exchange。這類(lèi) ? ? Exchange 會(huì)忽略路由 Key,取而代之的是,它們會(huì)查看消息的 Header,并由此來(lái)決定消息應(yīng)該發(fā)往哪個(gè) QueueQueue 可以有一個(gè)或多個(gè) Header 用來(lái)進(jìn)行匹配。這也就開(kāi)啟了復(fù)雜的路由場(chǎng)景,例如某個(gè) Queue 有時(shí)可以接收到某類(lèi)消息而有時(shí)則不行。

?

下面僅針對(duì) Fanout Exchange 進(jìn)行進(jìn)一步說(shuō)明:

?

Fanout Exchange

當(dāng)消息被發(fā)往 RabbitMQ 的時(shí)候,需要指明它需要發(fā)送到哪個(gè) Exchange。而這個(gè)Exchange 就可以被設(shè)置成為所謂的 Fanout Exchange

使用 Fanout Exchange,消息會(huì)被克隆,并被發(fā)送到所有與這個(gè) Exchange 綁定的 Queue 上,如下圖:

這里每一個(gè) Queue 都會(huì)得到屬于自己的消息的副本,這些消息副本就i可以被消息的接收者所使用。

在很多大規(guī)模多人游戲的場(chǎng)景中,經(jīng)常使用這種方式來(lái)同步玩家的數(shù)據(jù):每個(gè)玩家都訂閱到一個(gè)Fanout Exchange,你游戲的實(shí)例只需要將數(shù)據(jù)發(fā)送到一個(gè)地方即可,游戲中其他的玩家就會(huì)獲得更新,而你的游戲?qū)嵗筒恍枰廊绾螖?shù)據(jù)發(fā)往每一個(gè)玩家了。

總結(jié)

以上是生活随笔為你收集整理的RabbitMQ 入门:2. Exchange 和 Queue的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。