- 為什么使用消息隊列饺谬?
- 消息隊列有什么優(yōu)點和缺點捂刺?
- Kafka、ActiveMQ商蕴、RabbitMQ叠萍、RocketMQ 都有什么區(qū)別芝发,以及適合哪些場景绪商?
- 為什么使用消息隊列
消息隊列的使用場景總結起來常見的有三個:解耦、異步辅鲸、削峰格郁。
- 解耦
例如 系統(tǒng)1發(fā)送數(shù)據(jù)給系統(tǒng)2,系統(tǒng)3,系統(tǒng)4例书,通過接口來調用锣尉,現(xiàn)在系統(tǒng)5需要數(shù)據(jù),系統(tǒng)4不需要數(shù)據(jù)了决采。此刻我們就需要去a系統(tǒng)中重新編寫和刪除相應接口自沧,耦合嚴重。
此刻還要關注一些問題树瞭,調用接口的系統(tǒng)掛了怎么辦拇厢,要不要重發(fā),怎么存儲消息晒喷,這是個問題孝偎。
但是我們應用一個MQ,系統(tǒng)將數(shù)據(jù)發(fā)送到MQ中凉敲,讓其他系統(tǒng)自己去調用消費衣盾,此時系統(tǒng)不在考慮給哪個系統(tǒng)發(fā)送數(shù)據(jù),不需要維護這個代碼爷抓,不需要考慮是否失敗超時等情況势决。
總結:通過 MQ,Pub/Sub 發(fā)布訂閱消息這么一個模型蓝撇,系統(tǒng)徹底解耦了徽龟。
- 異步
A系統(tǒng)給每個系統(tǒng)發(fā)送接口數(shù)據(jù)都需要要損耗時間
系統(tǒng)在短時間內發(fā)送多個接口數(shù)據(jù)給MQ隊列,其他系統(tǒng)直接去隊列中消費消息唉地,損耗時間極短据悔,可以理解為將串行,變?yōu)椴⑿邪l(fā)送的數(shù)據(jù)耘沼。
-
削峰
在系統(tǒng)訪問高峰期的時候大量并行請求落到數(shù)據(jù)庫中极颓,可能直接導致mysql崩潰。
訪問數(shù)據(jù)庫
例如此刻有5k請求群嗤,數(shù)據(jù)庫只能承受2k菠隆,我們可以將5k請求放到MQ中,然后系統(tǒng)每次拉取2k請求的數(shù)據(jù)狂秘,雖然請求大的時候會積壓數(shù)據(jù)骇径,但是避免的mysql奔潰,保持系統(tǒng)正常使用