消息隊列的使用場景
05-07
MQ的本質是消息的路由(Routing)和緩存(Buffering)。這裡主要談下MQ的使用,主要有以下使用場景。
1、消息傳遞
比如A任務的輸出是B任務的輸入,B任務的輸出是C任務的輸入……
2、上游不關心執行結果,尤其是一對多的場景
3、上游關心執行結果,但是執行時間很長
執行時間長是說任務很重,或者IO延遲大(跨公網調用)。比如調用微信支付。
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:消息隊列 |