消息系統(tǒng)概述

What

消息系統(tǒng)是一種跨進程的通信機制,用于上下游傳遞消息的。

Why

使用了MQ后,消息發(fā)送上游只需要依賴MQ,不需要在依賴其他服務了。

When

  1. 數(shù)據(jù)驅(qū)動的任務依賴
    比如:系統(tǒng)經(jīng)常需要在凌晨做一些數(shù)據(jù)統(tǒng)計的任務,這些任務之間有一定的依賴性。比如說我要先歸檔,然后在統(tǒng)計完各個類別有多少個案件數(shù),然后用這個案件數(shù)來做下一步的統(tǒng)計...,這樣多個任務之間有個順序的依賴關系。
    這種情況下我們可以使用MQ來解耦,每個任務執(zhí)行結束后都發(fā)一個消息,告訴其他任務我這邊結束了,你可以開始了。
    可以用來做這種通知的,多個任務之間只需要依賴MQ即可
    其實這種情況也可以開個接口,但這樣可能會導致服務之間,系統(tǒng)之間耦合度比較高。

  2. 上游不需要關心你下游執(zhí)行的結果
    上游只管發(fā)消息就好了,你這個消息后面是怎么被消費的,是怎么被下游使用的我上游是不怎么太關心的。也可以說是不需要適時性那么高。
    比如:在案件信息有變動的時候需要給當事人發(fā)短信,但實際上我們可能不需要太關心短信是否適時的正確發(fā)送了。
    采用這種方案的優(yōu)點是:

    1. 上游執(zhí)行時間短
    2. 邏輯解耦,除了依賴mq,其他互不依賴
    3. 如果需要新增一個下游的功能,上游不需要修改代碼,只需要新加的這個下游服務訂閱上游即可
  3. 上游比較關注執(zhí)行的結果,但是執(zhí)行時間比較長
    有時候執(zhí)行執(zhí)行很長,而且我們還需要等待。這時候我們要關注結果我們該怎么辦呢?
    舉個栗子:在調(diào)用微信支付,我們會調(diào)用微信的接口,但是執(zhí)行時間會比較長。這個是時候微信會立即返回一個調(diào)用成功的消息,然后微信執(zhí)行完了,付款成功就往MQ發(fā)個消息。然后上游訂閱這個消息就可以知道付款到底是成功還是沒有成功,沒有成功的話可能需要重試之類的操作。

NO WHEN (不需要使用MQ的場景)

MQ這么好那我們什么場景都要用MQ嗎?
不是的,在那種調(diào)用和被調(diào)用的關系中我們是無法用MQ來取代的。
MQ有哪些缺點:

  1. 多加了一個組件
  2. 消息路徑更長了
  3. 要同時保證消息不丟失和消息不重復很難
  4. 上游不知道下游執(zhí)行的結果
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 一、MQ是干嘛的 消息總線(Message Queue),后文稱MQ,是一種跨進程的通信機制,用于上下游傳遞消息。...
    duzhongli閱讀 1,185評論 2 10
  • 消息隊列設計精要 消息隊列已經(jīng)逐漸成為企業(yè)IT系統(tǒng)內(nèi)部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終...
    meng_philip123閱讀 1,571評論 1 25
  • 反復研讀了兩篇文章之后,我對如何寫文有了自己的一些新的發(fā)現(xiàn)。原文夾敘夾議,按照事件發(fā)生的順序進行描述,修改后的文章...
    性感有才的郭郭閱讀 371評論 1 2
  • 操作系統(tǒng)ubuntu14.04,安裝ROS Indigo sudo sh -c 'echo "deb http:/...
    pxno5閱讀 535評論 0 0

友情鏈接更多精彩內(nèi)容