標籤:

消息隊列的使用場景

MQ的本質是消息的路由(Routing)和緩存(Buffering)。這裡主要談下MQ的使用,主要有以下使用場景。

1、消息傳遞

比如A任務的輸出是B任務的輸入,B任務的輸出是C任務的輸入……

2、上游不關心執行結果,尤其是一對多的場景

3、上游關心執行結果,但是執行時間很長

執行時間長是說任務很重,或者IO延遲大(跨公網調用)。比如調用微信支付。

解耦:網關+MQ

1)上游調用微信

2)微信返回調用成功結果(不一定真成功

3)執行完畢後,調用統一網關

4)網關將消息發送給MQ

5)上游獲得執行結果消息

這裡的MQ不能省略,因為如果增加調用方,還要修改代碼。

所以使用MQ要有上游對下游是一對多的思維

4、緩衝流量

無論是使用MQ還是RPC,都有一個流量過大的問題,就是上游發送過快,下游不能處理。

解決方法是把接收方獲取消息的方式改成pull方式。

這裡要要說pull和push的區別:

pull是客戶端去向MQ-server輪詢,調用介面是同步的。

push是客戶端監聽MQ-server發送消息

push的優點是發送消息及時,但缺點是如果發送過快,會使下游的接收緩衝區溢出。

鳴謝:

58到家MQ如何快速實現流量削峰填谷

JMS學習(八)-ActiveMQ Consumer 使用 push 還是 pull 獲取消息


推薦閱讀:

Spring 整合JMS 基於ActiveMQ 實現消息的發送接收
螞蟻消息中間件 (MsgBroker) 在 YGC 優化上的探索
Kafka基礎概念

TAG:消息隊列 |