为什么要用MQ
1.流量消峰
舉個(gè)例子,如果訂單系統(tǒng)最多能處理一萬次訂單,這個(gè)處理能力應(yīng)付正常時(shí)段的下單時(shí)綽綽有余,正
常時(shí)段我們下單一秒后就能返回結(jié)果。但是在高峰期,如果有兩萬次下單操作系統(tǒng)是處理不了的,只能限
制訂單超過一萬后不允許用戶下單。使用消息隊(duì)列做緩沖,我們可以取消這個(gè)限制,把一秒內(nèi)下的訂單分
散成一段時(shí)間來處理,這時(shí)有些用戶可能在下單十幾秒后才能收到下單成功的操作,但是比不能下單的體
驗(yàn)要好。
2.應(yīng)用解耦
以電商應(yīng)用為例,應(yīng)用中有訂單系統(tǒng)、庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng)。用戶創(chuàng)建訂單后,如果耦合
調(diào)用庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng),任何一個(gè)子系統(tǒng)出了故障,都會造成下單操作異常。當(dāng)轉(zhuǎn)變成基于
消息隊(duì)列的方式后,系統(tǒng)間調(diào)用的問題會減少很多,比如物流系統(tǒng)因?yàn)榘l(fā)生故障,需要幾分鐘來修復(fù)。在
這幾分鐘的時(shí)間里,物流系統(tǒng)要處理的內(nèi)存被緩存在消息隊(duì)列中,用戶的下單操作可以正常完成。當(dāng)物流
系統(tǒng)恢復(fù)后,繼續(xù)處理訂單信息即可,中單用戶感受不到物流系統(tǒng)的故障,提升系統(tǒng)的可用性。
3.異步處理
有些服務(wù)間調(diào)用是異步的,例如 A 調(diào)用 B,B 需要花費(fèi)很長時(shí)間執(zhí)行,但是 A 需要知道 B 什么時(shí)候可
以執(zhí)行完,以前一般有兩種方式,A 過一段時(shí)間去調(diào)用 B 的查詢 api 查詢。或者 A 提供一個(gè) callback api, B 執(zhí)行完之后調(diào)用 api 通知 A 服務(wù)。這兩種方式都不是很優(yōu)雅,使用消息總線,可以很方便解決這個(gè)問題,
A 調(diào)用 B 服務(wù)后,只需要監(jiān)聽 B 處理完成的消息,當(dāng) B 處理完成后,會發(fā)送一條消息給 MQ,MQ 會將此消
息轉(zhuǎn)發(fā)給 A 服務(wù)。這樣 A 服務(wù)既不用循環(huán)調(diào)用 B 的查詢 api,也不用提供 callback api。同樣B 服務(wù)也不用
做這些操作。A 服務(wù)還能及時(shí)的得到異步處理成功的消息。
總結(jié)
- 上一篇: 说说Broker服务节点、Queue队列
- 下一篇: RabbitMQ之交换机的四种类型和属性