0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊消息中心的设计与实现

jf_ro2CN3Fa 来源:知了一笑 2023-05-29 15:03 次阅读

一、业务背景

微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理、MQ队列、缓存机制、消息中心等等,这些服务需要提供各种可以复用的方法或者接口,以便其他业务服务可以快速调用;下面来看看消息通知的原理:

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

这里的消息不同于MQ队列,是指业务侧的通知机制,例如短信、邮件、系统消息等,在业务层面的需求很多,通常会封装单独的消息中心提供通知机制;

从流程上面看,消息通知是典型的生产-消费模式,业务侧不断的生产消息,消息中心在接收之后进行消费,把通知推送到相应的渠道中,很显然这种逻辑具备很高的复用性。

二、消息通知

1、流程管理

消息通知的流程设计,在各个业务线中通过消息中心提供的接口方法,将不同场景下的消息内容提交到消息中心,消息中心进行统一维护管理,并根据消息的来源和去向,适配相应的推送逻辑:

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

消息生产:涉及到的场景很多,比如活动、营销机制、系统通知、业务流转、过期提醒等;

消息管理:对预发送消息的结构和参数进行校验,并创建消息推送的任务,维护任务级别的推送管理,跟踪消息的状态周期;

消息消费:基于消息任务的结构,构建消息推送的主体内容,并对接多个发送渠道,实现通知的高效触达;

定时任务:消息可以直接即时推送,但如果是夜间定时任务触发,则要考虑推送延迟问题,将消息放在指定时段投递;

渠道对接:通常不同的渠道意味着不同的场景,例如监控推送钉钉,活动一般推送微信,账户变动发邮件,营销走短信,业务则应用内通知;

在整个流程中涉及到的模块比较多,状态的流转也很复杂,但是通过消息中心进行统一标准管理和流入流出的跟踪,也可以提供清晰的生命周期监控和维护;

2、流程时序

在整个消息通知链路中,在不同的流转节点中,无不涉及状态的变化(即from.to状态),这样可以构成整个生命周期的视图:

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

初始化:业务方构建简单的消息结构,请求发送到消息中心后,初始化一个消息任务;

任务化:对消息发送请求进行校验,并将消息转换成一个标准的推送任务结构;

推送中:根据任务推送的时间周期类型,将任务构建成不同渠道的通知主体,从而进行渠道消息推送;

已完成:根据消息在渠道推送的状态回调,更新消息中心的任务完成状态,或者失败重试;

大部分的消息通知机制都可以容忍一定的延迟性,所以消息中心完全可以解耦各个流程,引入MQ队列或者异步机制,业务方只需要将请求发送到消息中心,之后由消息中心统一调度和管理即可;

3、结构设计

这里根据系统的实现过程和经验,给出一个数据结构的设计参考,用来对业务场景做简单的维度描述:

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

消息模板:定义通知的主体结构,基于消息的参数模型,构建推送的消息内容;

消息任务:消息中心管理和维护的主体结构,以任务的模式维护消息从生产到推送完成的整个状态周期;

场景记录:消息最终推送出去的内容和场景分类,也可以简单的理解为不同渠道的投递记录;

交互消息:强调消息在接收方是否触达并且对消息产生了交互行为,例如会话,邮件回复,状态关联等;

三、实践总结

最后还是站在技术实现的角度,总结一下消息通知机制中的一些关键问题:

生产消费:消息生产之后写入消息中心的存储容器,之后进行消费流程的管理,是业务解耦的常用手段;

任务管理:以任务的模式进行消息推送的调度,通过任务状态的变化和控制,实现生命周期的管理;

状态机:描述消息的流转节点和状态,在不同的事件中触发不同的状态切换和转移,并在状态变化后衔接各种业务动作;

渠道对接:通常消息推送的渠道多是第三方平台,所以在消息中心会接入诸多的渠道,例如微信、钉钉、短信等;

基础封装:作为分布式系统中的基础功能,在封装消息管理功能时,要考虑一定的复用性和流程的可视化呈现;

消息的本质是信息的触达和传递,但是过多的消息通知也容易让用户产生厌倦心态,所以消息内容的简洁明确,推送的间隔时段以及阅读提醒,在产品具体的实现上需要极为用心,从而让消息在业务体系中发挥更大的价值。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7447

    浏览量

    163583
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27470

原文标题:聊聊 消息中心的设计与实现

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    聊聊 220V交流 过零检测

    聊聊过零检测,以及如何实现过零检测 ...... by 矜辰所致
    的头像 发表于 06-06 11:20 4200次阅读
    <b class='flag-5'>聊聊</b> 220V交流 过零检测

    聊聊消息中心的设计与实现逻辑方法

    微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理、MQ队列、缓存机制、消息中心等等,这些服务需要提供各种可以复用的方法或者接口,以便其他业务服务可以快速调用;
    的头像 发表于 12-28 17:21 957次阅读
    <b class='flag-5'>聊聊</b>消息<b class='flag-5'>中心</b>的设计与<b class='flag-5'>实现</b>逻辑方法

    高通产品的进来聊聊

    高通产品的进来聊聊,共享一下资源.
    发表于 01-03 14:32

    使用Azure软件包连接IoT中心可以实现哪些功能

    使用Azure软件包连接IoT中心可以实现什么功能?Azure IoT中心的架构图及功能
    发表于 03-30 08:07

    聊聊计算机加法的电路原理和proteus仿真

    ”待实现。在本文中,我们主要来聊聊计算机加法的电路原理和proteus仿真,顺便会搞定之前文章提到的“神秘电路”
    发表于 07-29 06:19

    聊聊stm32的入门学习路线

    绝大部分的stm32的学习者是在入门阶段的,所以今天我们就来聊聊stm32的入门学习路线。先来看个图,相信会有所了解。首先学习stm32 不管是C语言还是汇编肯定跑不了的所以C语言一样要打好基础...
    发表于 08-03 07:08

    聊聊CMSIS

    这次我们来聊聊CMSIS。之前在Kile环境下创建STM32工程的时候,对有些文件的加入总不是很了解,书上或网上建立工程的教程对于这些文件的加入也是一笔带过,或者直接不说。对于类似名叫
    发表于 08-24 07:50

    聊聊对按键扫描软件结构的理解

    按键扫描,我想应该是比较简单的单片机应用了,但是有时候看起来简单的东西反而不好写。本文拿大部分人觉得简单的按键扫描聊聊我工作至今对于软件结构的理解。嗯,对的,是结构,不是架构,暂时不敢提架构这个词
    发表于 12-02 06:27

    聊聊基于STM32F103的红外循迹避障小车的Proteus仿真

    红外循迹及红外避障实现较简单,无论是51单片机还是STM32单片机,其例程随处可见。但是完全可以运行的Proteus仿真,开源的并不多,更不要说基于STM32单片机的仿真。下面跟大家聊聊基于STM32F103的红外循迹避障小车的Proteus仿真。
    发表于 01-05 06:46

    聊聊复位电路

    时钟电路我第一篇博客已经说讲过了,今天我们来聊聊复位电路。当然,复位电路博大精深,并...
    发表于 01-17 07:50

    聊聊存储器的相关知识

    虚拟地址物理地址等众多地址及MMU相关知识先聊聊存储器STM32单片机存储器关于编译器生成的文件数据在存储器上的存储结构物理地址、虚拟地址、线性地址和逻辑地址物理地址虚拟地址逻辑地址线性地址这些地址
    发表于 02-11 07:51

    聊聊字符串

    大家好,我是惊觉,今天聊聊字符串。字符串的使用场景非常之多,人机交互和双机通信都会用到。比如:通过串口向单片机发送指令,以执行操作或配置参数。单片机读取传感器数据,数据格式是字符串。一般GPS数据
    发表于 02-28 06:52

    聊聊java泛型实现的原理与好处

    取得自己泛型参数的Class类型,C++只能由编译器推断在不为人知的地方生成新的类,对于特定的模板参数你只能使用特化。在本文中我主要想聊聊泛型的实现原理和一些高级特性。 泛型基础 泛型是对Java语言类型系统的一种扩展,有点类似于C++的模板,可以把类型
    发表于 09-27 16:50 0次下载

    聊聊Redis的使用案例

    今天我们来聊聊 Redis 的使用案例。
    的头像 发表于 12-13 14:13 484次阅读

    聊聊嵌入式软件分层

    今天以控制LED闪烁为例,聊聊嵌入式软件分层
    的头像 发表于 12-28 09:22 634次阅读