0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聊聊消息中心的設(shè)計與實現(xiàn)

jf_ro2CN3Fa ? 來源:知了一笑 ? 2023-05-29 15:03 ? 次閱讀

一、業(yè)務(wù)背景

微服務(wù)的架構(gòu)體系中,會存在很多基礎(chǔ)服務(wù),提供一些大部分服務(wù)都可能需要的能力,比如文件管理、MQ隊列、緩存機制、消息中心等等,這些服務(wù)需要提供各種可以復(fù)用的方法或者接口,以便其他業(yè)務(wù)服務(wù)可以快速調(diào)用;下面來看看消息通知的原理:

154edea0-fdee-11ed-90ce-dac502259ad0.png

這里的消息不同于MQ隊列,是指業(yè)務(wù)側(cè)的通知機制,例如短信、郵件、系統(tǒng)消息等,在業(yè)務(wù)層面的需求很多,通常會封裝單獨的消息中心提供通知機制;

從流程上面看,消息通知是典型的生產(chǎn)-消費模式,業(yè)務(wù)側(cè)不斷的生產(chǎn)消息,消息中心在接收之后進(jìn)行消費,把通知推送到相應(yīng)的渠道中,很顯然這種邏輯具備很高的復(fù)用性。

二、消息通知

1、流程管理

消息通知的流程設(shè)計,在各個業(yè)務(wù)線中通過消息中心提供的接口方法,將不同場景下的消息內(nèi)容提交到消息中心,消息中心進(jìn)行統(tǒng)一維護(hù)管理,并根據(jù)消息的來源和去向,適配相應(yīng)的推送邏輯:

1553bb00-fdee-11ed-90ce-dac502259ad0.png

消息生產(chǎn):涉及到的場景很多,比如活動、營銷機制、系統(tǒng)通知、業(yè)務(wù)流轉(zhuǎn)、過期提醒等;

消息管理:對預(yù)發(fā)送消息的結(jié)構(gòu)和參數(shù)進(jìn)行校驗,并創(chuàng)建消息推送的任務(wù),維護(hù)任務(wù)級別的推送管理,跟蹤消息的狀態(tài)周期;

消息消費:基于消息任務(wù)的結(jié)構(gòu),構(gòu)建消息推送的主體內(nèi)容,并對接多個發(fā)送渠道,實現(xiàn)通知的高效觸達(dá);

定時任務(wù):消息可以直接即時推送,但如果是夜間定時任務(wù)觸發(fā),則要考慮推送延遲問題,將消息放在指定時段投遞;

渠道對接:通常不同的渠道意味著不同的場景,例如監(jiān)控推送釘釘,活動一般推送微信,賬戶變動發(fā)郵件,營銷走短信,業(yè)務(wù)則應(yīng)用內(nèi)通知;

在整個流程中涉及到的模塊比較多,狀態(tài)的流轉(zhuǎn)也很復(fù)雜,但是通過消息中心進(jìn)行統(tǒng)一標(biāo)準(zhǔn)管理和流入流出的跟蹤,也可以提供清晰的生命周期監(jiān)控和維護(hù);

2、流程時序

在整個消息通知鏈路中,在不同的流轉(zhuǎn)節(jié)點中,無不涉及狀態(tài)的變化(即from.to狀態(tài)),這樣可以構(gòu)成整個生命周期的視圖:

155b4910-fdee-11ed-90ce-dac502259ad0.png

初始化:業(yè)務(wù)方構(gòu)建簡單的消息結(jié)構(gòu),請求發(fā)送到消息中心后,初始化一個消息任務(wù);

任務(wù)化:對消息發(fā)送請求進(jìn)行校驗,并將消息轉(zhuǎn)換成一個標(biāo)準(zhǔn)的推送任務(wù)結(jié)構(gòu);

推送中:根據(jù)任務(wù)推送的時間周期類型,將任務(wù)構(gòu)建成不同渠道的通知主體,從而進(jìn)行渠道消息推送;

已完成:根據(jù)消息在渠道推送的狀態(tài)回調(diào),更新消息中心的任務(wù)完成狀態(tài),或者失敗重試;

大部分的消息通知機制都可以容忍一定的延遲性,所以消息中心完全可以解耦各個流程,引入MQ隊列或者異步機制,業(yè)務(wù)方只需要將請求發(fā)送到消息中心,之后由消息中心統(tǒng)一調(diào)度和管理即可;

3、結(jié)構(gòu)設(shè)計

這里根據(jù)系統(tǒng)的實現(xiàn)過程和經(jīng)驗,給出一個數(shù)據(jù)結(jié)構(gòu)的設(shè)計參考,用來對業(yè)務(wù)場景做簡單的維度描述:

15623b6c-fdee-11ed-90ce-dac502259ad0.png

消息模板:定義通知的主體結(jié)構(gòu),基于消息的參數(shù)模型,構(gòu)建推送的消息內(nèi)容;

消息任務(wù):消息中心管理和維護(hù)的主體結(jié)構(gòu),以任務(wù)的模式維護(hù)消息從生產(chǎn)到推送完成的整個狀態(tài)周期;

場景記錄:消息最終推送出去的內(nèi)容和場景分類,也可以簡單的理解為不同渠道的投遞記錄;

交互消息:強調(diào)消息在接收方是否觸達(dá)并且對消息產(chǎn)生了交互行為,例如會話,郵件回復(fù),狀態(tài)關(guān)聯(lián)等;

三、實踐總結(jié)

最后還是站在技術(shù)實現(xiàn)的角度,總結(jié)一下消息通知機制中的一些關(guān)鍵問題:

生產(chǎn)消費:消息生產(chǎn)之后寫入消息中心的存儲容器,之后進(jìn)行消費流程的管理,是業(yè)務(wù)解耦的常用手段;

任務(wù)管理:以任務(wù)的模式進(jìn)行消息推送的調(diào)度,通過任務(wù)狀態(tài)的變化和控制,實現(xiàn)生命周期的管理;

狀態(tài)機:描述消息的流轉(zhuǎn)節(jié)點和狀態(tài),在不同的事件中觸發(fā)不同的狀態(tài)切換和轉(zhuǎn)移,并在狀態(tài)變化后銜接各種業(yè)務(wù)動作;

渠道對接:通常消息推送的渠道多是第三方平臺,所以在消息中心會接入諸多的渠道,例如微信、釘釘、短信等;

基礎(chǔ)封裝:作為分布式系統(tǒng)中的基礎(chǔ)功能,在封裝消息管理功能時,要考慮一定的復(fù)用性和流程的可視化呈現(xiàn);

消息的本質(zhì)是信息的觸達(dá)和傳遞,但是過多的消息通知也容易讓用戶產(chǎn)生厭倦心態(tài),所以消息內(nèi)容的簡潔明確,推送的間隔時段以及閱讀提醒,在產(chǎn)品具體的實現(xiàn)上需要極為用心,從而讓消息在業(yè)務(wù)體系中發(fā)揮更大的價值。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7439

    瀏覽量

    163529
  • 狀態(tài)機
    +關(guān)注

    關(guān)注

    2

    文章

    491

    瀏覽量

    27461

原文標(biāo)題:聊聊 消息中心的設(shè)計與實現(xiàn)

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    聊聊阻容降壓原理和實際使用的電路

    電路小課堂,聊聊阻容降壓電路的原理和實際使用電路 ...... 矜辰所致
    的頭像 發(fā)表于 08-31 10:39 ?6675次閱讀
    <b class='flag-5'>聊聊</b>阻容降壓原理和實際使用的電路

    聊聊 220V交流 過零檢測

    聊聊過零檢測,以及如何實現(xiàn)過零檢測 ...... by 矜辰所致
    的頭像 發(fā)表于 06-06 11:20 ?4163次閱讀
    <b class='flag-5'>聊聊</b> 220V交流 過零檢測

    聊聊消息中心的設(shè)計與實現(xiàn)邏輯方法

    微服務(wù)的架構(gòu)體系中,會存在很多基礎(chǔ)服務(wù),提供一些大部分服務(wù)都可能需要的能力,比如文件管理、MQ隊列、緩存機制、消息中心等等,這些服務(wù)需要提供各種可以復(fù)用的方法或者接口,以便其他業(yè)務(wù)服務(wù)可以快速調(diào)用;
    的頭像 發(fā)表于 12-28 17:21 ?933次閱讀
    <b class='flag-5'>聊聊</b>消息<b class='flag-5'>中心</b>的設(shè)計與<b class='flag-5'>實現(xiàn)</b>邏輯方法

    高通產(chǎn)品的進(jìn)來聊聊

    高通產(chǎn)品的進(jìn)來聊聊,共享一下資源.
    發(fā)表于 01-03 14:32

    使用Azure軟件包連接IoT中心可以實現(xiàn)哪些功能

    使用Azure軟件包連接IoT中心可以實現(xiàn)什么功能?Azure IoT中心的架構(gòu)圖及功能
    發(fā)表于 03-30 08:07

    聊聊計算機加法的電路原理和proteus仿真

    ”待實現(xiàn)。在本文中,我們主要來聊聊計算機加法的電路原理和proteus仿真,順便會搞定之前文章提到的“神秘電路”
    發(fā)表于 07-29 06:19

    聊聊stm32的入門學(xué)習(xí)路線

    絕大部分的stm32的學(xué)習(xí)者是在入門階段的,所以今天我們就來聊聊stm32的入門學(xué)習(xí)路線。先來看個圖,相信會有所了解。首先學(xué)習(xí)stm32 不管是C語言還是匯編肯定跑不了的所以C語言一樣要打好基礎(chǔ)...
    發(fā)表于 08-03 07:08

    聊聊CMSIS

    這次我們來聊聊CMSIS。之前在Kile環(huán)境下創(chuàng)建STM32工程的時候,對有些文件的加入總不是很了解,書上或網(wǎng)上建立工程的教程對于這些文件的加入也是一筆帶過,或者直接不說。對于類似名叫
    發(fā)表于 08-24 07:50

    聊聊對按鍵掃描軟件結(jié)構(gòu)的理解

    按鍵掃描,我想應(yīng)該是比較簡單的單片機應(yīng)用了,但是有時候看起來簡單的東西反而不好寫。本文拿大部分人覺得簡單的按鍵掃描聊聊我工作至今對于軟件結(jié)構(gòu)的理解。嗯,對的,是結(jié)構(gòu),不是架構(gòu),暫時不敢提架構(gòu)這個詞
    發(fā)表于 12-02 06:27

    聊聊基于STM32F103的紅外循跡避障小車的Proteus仿真

    紅外循跡及紅外避障實現(xiàn)較簡單,無論是51單片機還是STM32單片機,其例程隨處可見。但是完全可以運行的Proteus仿真,開源的并不多,更不要說基于STM32單片機的仿真。下面跟大家聊聊基于STM32F103的紅外循跡避障小車的Proteus仿真。
    發(fā)表于 01-05 06:46

    聊聊復(fù)位電路

    時鐘電路我第一篇博客已經(jīng)說講過了,今天我們來聊聊復(fù)位電路。當(dāng)然,復(fù)位電路博大精深,并...
    發(fā)表于 01-17 07:50

    聊聊存儲器的相關(guān)知識

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識先聊聊存儲器STM32單片機存儲器關(guān)于編譯器生成的文件數(shù)據(jù)在存儲器上的存儲結(jié)構(gòu)物理地址、虛擬地址、線性地址和邏輯地址物理地址虛擬地址邏輯地址線性地址這些地址
    發(fā)表于 02-11 07:51

    聊聊字符串

    大家好,我是驚覺,今天聊聊字符串。字符串的使用場景非常之多,人機交互和雙機通信都會用到。比如:通過串口向單片機發(fā)送指令,以執(zhí)行操作或配置參數(shù)。單片機讀取傳感器數(shù)據(jù),數(shù)據(jù)格式是字符串。一般GPS數(shù)據(jù)
    發(fā)表于 02-28 06:52

    聊聊java泛型實現(xiàn)的原理與好處

    取得自己泛型參數(shù)的Class類型,C++只能由編譯器推斷在不為人知的地方生成新的類,對于特定的模板參數(shù)你只能使用特化。在本文中我主要想聊聊泛型的實現(xiàn)原理和一些高級特性。 泛型基礎(chǔ) 泛型是對Java語言類型系統(tǒng)的一種擴展,有點類似于C++的模板,可以把類型
    發(fā)表于 09-27 16:50 ?0次下載

    聊聊Redis的使用案例

    今天我們來聊聊 Redis 的使用案例。
    的頭像 發(fā)表于 12-13 14:13 ?476次閱讀