課程
/后端開發(fā)
/PHP
/PHP消息隊(duì)列實(shí)現(xiàn)及應(yīng)用
看過rabbitmq官網(wǎng)的demo,沒有交換機(jī)的也可以實(shí)現(xiàn)隊(duì)列。后來場景復(fù)雜了,用到了exchange。具體上exchange有什么用處?能清晰的解答下嗎?
2017-09-26
源自:PHP消息隊(duì)列實(shí)現(xiàn)及應(yīng)用 5-1
正在回答
我覺得 消息隊(duì)列正確的用法 應(yīng)該是一個生產(chǎn)者對應(yīng)一個 交換機(jī)。 一個 消費(fèi)者對應(yīng)一個 隊(duì)列, 至于 分發(fā)的邏輯 是通過各種綁定來實(shí)現(xiàn)的。
例如 電子商務(wù)場景:產(chǎn)生訂單的有很多 渠道 比如網(wǎng)站,團(tuán)購,秒殺,第三方等等。每個 都 對應(yīng)一個 交換機(jī)。產(chǎn)生的訂單 數(shù)據(jù)是類似的 但key 可以是 商品類別加上id 等信息組合。比如 大類.小類.商品id 這種格式
剛開始的時候 只有一個 總倉 訂單處理也就一個程序 一個消費(fèi)者 也就一個隊(duì)列。 所有交換機(jī)都綁定這個隊(duì)列。這樣所有訂單都到總倉去了
慢慢生意大了 比如生鮮分出去了個 倉 有單獨(dú)的處理程序了 也成了個新的隊(duì)列 這樣 在mq 后臺 根據(jù)key 中大類是生鮮的綁定到新的隊(duì)列就好了
再過段時間 某次秒殺,預(yù)計(jì)量比較大。實(shí)現(xiàn)準(zhǔn)備了個小倉庫 把這個秒殺商品預(yù)先包好存放在那單獨(dú)處理了。這時運(yùn)行個 新的程序 產(chǎn)生個 新的隊(duì)列 ,這時就將秒殺交換機(jī)的 按照key 中的id為此商品的 綁定到新的隊(duì)列。這樣就可以了 而無論是秒殺的其他產(chǎn)品,還是在其他渠道上這個商品訂單還是 總倉處理
其實(shí) 交換機(jī)還可以再綁交換機(jī) 多次分發(fā)更實(shí)現(xiàn)更復(fù)雜的邏輯。就是這么綁來綁去,實(shí)現(xiàn) 不用改代碼就實(shí)現(xiàn)了整個信息流隨著業(yè)務(wù)的變遷
你所說的簡單的例子沒有聲明交換器,用雙引號(即空字符串)表示,但實(shí)際他是調(diào)用了默認(rèn)的交換器,并以隊(duì)列名作為路由鍵發(fā)布消息!消費(fèi)端也是看似沒有綁定交換器,但底層卻是根據(jù)隊(duì)列名作為路由鍵進(jìn)行綁定!交換器始終是存在的,不存在生產(chǎn)者直接將消息發(fā)送給隊(duì)列
AMQP協(xié)議中的核心思想就是生產(chǎn)者和消費(fèi)者隔離,生產(chǎn)者從不直接將消息發(fā)送給隊(duì)列。生產(chǎn)者通常不知道是否一個消息會被發(fā)送到隊(duì)列中,只是將消息發(fā)送到一個交換機(jī)。先由Exchange來接收,然后Exchange按照特定的策略轉(zhuǎn)發(fā)到Queue進(jìn)行存儲。同理,消費(fèi)者也是如此。Exchange 就類似于一個交換機(jī),轉(zhuǎn)發(fā)各個消息分發(fā)到相應(yīng)的隊(duì)列中。
207xiaopang
舉報(bào)
消息隊(duì)列是個什么玩意兒,使用隊(duì)列解決秒殺等實(shí)際問題概念和使用方法
4 回答為什么需要定時去執(zhí)行??這樣做的好處是什么?訂單不是可以在點(diǎn)擊按鈕觸發(fā)修改狀態(tài)就可以實(shí)現(xiàn)?
2 回答linux啟動了死循環(huán)的php后,是否需要關(guān)閉死循環(huán)php
1 回答windows下要怎么設(shè)置定時任務(wù)?
1 回答處理完之后 order_queue表的status修改成1,為什么order表的status不修改?
1 回答沒的意思是什么
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2018-06-16
我覺得 消息隊(duì)列正確的用法 應(yīng)該是一個生產(chǎn)者對應(yīng)一個 交換機(jī)。 一個 消費(fèi)者對應(yīng)一個 隊(duì)列, 至于 分發(fā)的邏輯 是通過各種綁定來實(shí)現(xiàn)的。
例如 電子商務(wù)場景:產(chǎn)生訂單的有很多 渠道 比如網(wǎng)站,團(tuán)購,秒殺,第三方等等。每個 都 對應(yīng)一個 交換機(jī)。產(chǎn)生的訂單 數(shù)據(jù)是類似的 但key 可以是 商品類別加上id 等信息組合。比如 大類.小類.商品id 這種格式
剛開始的時候 只有一個 總倉 訂單處理也就一個程序 一個消費(fèi)者 也就一個隊(duì)列。 所有交換機(jī)都綁定這個隊(duì)列。這樣所有訂單都到總倉去了
慢慢生意大了 比如生鮮分出去了個 倉 有單獨(dú)的處理程序了 也成了個新的隊(duì)列 這樣 在mq 后臺 根據(jù)key 中大類是生鮮的綁定到新的隊(duì)列就好了
再過段時間 某次秒殺,預(yù)計(jì)量比較大。實(shí)現(xiàn)準(zhǔn)備了個小倉庫 把這個秒殺商品預(yù)先包好存放在那單獨(dú)處理了。這時運(yùn)行個 新的程序 產(chǎn)生個 新的隊(duì)列 ,這時就將秒殺交換機(jī)的 按照key 中的id為此商品的 綁定到新的隊(duì)列。這樣就可以了 而無論是秒殺的其他產(chǎn)品,還是在其他渠道上這個商品訂單還是 總倉處理
其實(shí) 交換機(jī)還可以再綁交換機(jī) 多次分發(fā)更實(shí)現(xiàn)更復(fù)雜的邏輯。就是這么綁來綁去,實(shí)現(xiàn) 不用改代碼就實(shí)現(xiàn)了整個信息流隨著業(yè)務(wù)的變遷
2018-05-21
你所說的簡單的例子沒有聲明交換器,用雙引號(即空字符串)表示,但實(shí)際他是調(diào)用了默認(rèn)的交換器,并以隊(duì)列名作為路由鍵發(fā)布消息!消費(fèi)端也是看似沒有綁定交換器,但底層卻是根據(jù)隊(duì)列名作為路由鍵進(jìn)行綁定!交換器始終是存在的,不存在生產(chǎn)者直接將消息發(fā)送給隊(duì)列
2017-09-29
AMQP協(xié)議中的核心思想就是生產(chǎn)者和消費(fèi)者隔離,生產(chǎn)者從不直接將消息發(fā)送給隊(duì)列。生產(chǎn)者通常不知道是否一個消息會被發(fā)送到隊(duì)列中,只是將消息發(fā)送到一個交換機(jī)。先由Exchange來接收,然后Exchange按照特定的策略轉(zhuǎn)發(fā)到Queue進(jìn)行存儲。同理,消費(fèi)者也是如此。Exchange 就類似于一個交換機(jī),轉(zhuǎn)發(fā)各個消息分發(fā)到相應(yīng)的隊(duì)列中。