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