厌烦被消息打扰,又怕突然间的安静;

一、业务背景

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

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

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

二、消息通知

1、流程管理

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

  • 消息生产:涉及到的场景很多,比如活动、营销机制、系统通知、业务流转、过期提醒等;
  • 消息管理:对预发送消息的结构和参数进行校验,并创建消息推送的任务,维护任务级别的推送管理,跟踪消息的状态周期;
  • 消息消费:基于消息任务的结构,构建消息推送的主体内容,并对接多个发送渠道,实现通知的高效触达;
  • 定时任务:消息可以直接即时推送,但如果是夜间定时任务触发,则要考虑推送延迟问题,将消息放在指定时段投递;
  • 渠道对接:通常不同的渠道意味着不同的场景,例如监控推送钉钉,活动一般推送微信,账户变动发邮件,营销走短信,业务则应用内通知;

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

2、流程时序

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

  • 初始化:业务方构建简单的消息结构,请求发送到消息中心后,初始化一个消息任务;
  • 任务化:对消息发送请求进行校验,并将消息转换成一个标准的推送任务结构;
  • 推送中:根据任务推送的时间周期类型,将任务构建成不同渠道的通知主体,从而进行渠道消息推送;
  • 已完成:根据消息在渠道推送的状态回调,更新消息中心的任务完成状态,或者失败重试;

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

3、结构设计

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

  • 消息模板:定义通知的主体结构,基于消息的参数模型,构建推送的消息内容;
  • 消息任务:消息中心管理和维护的主体结构,以任务的模式维护消息从生产到推送完成的整个状态周期;
  • 场景记录:消息最终推送出去的内容和场景分类,也可以简单的理解为不同渠道的投递记录;
  • 交互消息:强调消息在接收方是否触达并且对消息产生了交互行为,例如会话,邮件回复,状态关联等;

三、实践总结

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

  • 生产消费:消息生产之后写入消息中心的存储容器,之后进行消费流程的管理,是业务解耦的常用手段;
  • 任务管理:以任务的模式进行消息推送的调度,通过任务状态的变化和控制,实现生命周期的管理;
  • 状态机:描述消息的流转节点和状态,在不同的事件中触发不同的状态切换和转移,并在状态变化后衔接各种业务动作;
  • 渠道对接:通常消息推送的渠道多是第三方平台,所以在消息中心会接入诸多的渠道,例如微信、钉钉、短信等;
  • 基础封装:作为分布式系统中的基础功能,在封装消息管理功能时,要考虑一定的复用性和流程的可视化呈现;

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

End


聊聊消息中心的设计与实现逻辑相关推荐

  1. 消息中心构架设计说明书

    消息中心构架设计说明书 1.文档介绍 1.1 文档目的 1.2 文档范围 1.3 读者对象 1.4 参考文献 1.5 术语与缩写解释 2 系统概述 3 设计约束 4 设计策略 5 系统总体结构 5.1 ...

  2. 聊聊支付流程的设计与实现逻辑

    新手打怵老手头疼的业务: 一.业务背景 通常在业务体系中,都会或多或少的涉及到支付相关的功能:对于一些经验欠缺同学来说,最紧张的就是面对这类支付结算的逻辑,因为流程中的任何细节问题,都可能引发对账异常 ...

  3. 聊聊运营活动的设计与实现逻辑

    产品留不住,唯有套路得用户: 一.业务背景 在多数的产品功能体系中,都会设计活动板块,活动作为运营的手段,根本目的是为了更好的连接产品和用户,所以很考验运营方案的策划,在活动的生命周期内完成对业务指标 ...

  4. java netty聊天室_netty实现消息中心(二)基于netty搭建一个聊天室

    前言 上篇博文(netty实现消息中心(一)思路整理 )大概说了下netty websocket消息中心的设计思路,这篇文章主要说说简化版的netty聊天室代码实现,支持群聊和点对点聊天. 此demo ...

  5. 业务消息中心系统设计与实现(一)

    目录 解决问题场景? 那么这款内部业务消息中心需要满足哪些功能呢? 哈喽小伙伴,我是kilde,和有需要的小伙伴分享一个业务消息中心的设计思想与实现,喜欢的小伙伴可以点赞关注博主,觉得有用的也可以打赏 ...

  6. 仿微博消息中心的系统设计与实现

    最近在实现一个类似于微博.网易云的消息中心模块.主要实现的功能是,将系统中的点赞.评论.@等消息做汇合.今天跟大家分享下,我们的设计和实现思路. 首先说明,我们目前是微服务的架构.所以本篇文章中对于消 ...

  7. 以 B 站为例,聊聊站内消息系统的设计

    作者:guang19 使用过简书,知乎或 b 站的小伙伴应该都有这样的使用体验:当有其他用户关注我们或者私信我们的行为时,我们会收到相关的消息. 虽然这些功能看上去简单,但其背后的设计是非常复杂的,几 ...

  8. 亿级用户中心的设计与实践

    -     前言    - 用户中心是互联网最为基础的核心系统,随着业务和用户的增长,势必会带来不断的挑战.如何在亿级的情况下保证系统的高可用,高性能以及高安全,本文能够给你一套实践方案. 注1:本文 ...

  9. 骑士卡:基于Kafka搭建消息中心,上亿消息推送轻松完成

    全球购骑士卡是国内领先的会员制特权电商平台,汇聚国内外"吃喝玩乐买"超 300 项会员专属优惠特权.全球购骑士卡基于移动互联生活方式,打通线上.线下消费场景,汇集时下热门.高频的商 ...

最新文章

  1. 极客新闻——04、WiFi万能钥匙万玉权:管理应该是“自下而上”
  2. PMP-【第15章 PMP考试的难点与易点】2021-2-17(304页-312页)【完】
  3. P2P in Flash Player 10
  4. openpyxl 绘制饼形图_openpyxl3.0官方文档(13)—— 饼图
  5. android定时循环,Android AlarmManager实现定时循环后台任务
  6. Linux 使用 jstat 命令查看 jvm 的 GC 情况
  7. 如何降低软件项目的风险 -- 包括客户的风险,软件提供商的风险
  8. 计算机系统文字图片以啥子存在,电脑如何识别图片中文字的字体|电脑通过图片识别字体的方法...
  9. STC 芯片编写串口数据方法。
  10. 服务器tcp协议安装不了,win2008 R2提示错误“请安装TCP/IP协议 error=10106
  11. 如何禁用GeForce Experience的奖励广告
  12. 个性测试:跟乐嘉学性格色彩(图)
  13. vue实现搜索框记录搜索历史_Vue 实现输入框新增搜索历史记录功能
  14. 选对流程引擎,玩转流程设计不是梦
  15. VideoCapture()的使用------python
  16. 【观察】借道企业微信,销售易打开新一轮增长空间
  17. 短视频和图片去水印的三种方法
  18. python网格交易_网格交易(期货)
  19. 小程序获取oppenid时返回40125或者40029
  20. 假发外贸有必要建自己的网店吗?

热门文章

  1. 怎么确保数据在网络传输的安全性?
  2. Android 游戏设计教程:游戏元素和工具
  3. 查看Linux内核修改及更新记录方法
  4. JN516x串口测试
  5. 一、MySQL数据库设置默认时区
  6. oracle存储过程初学实例
  7. 6个usb口服务器无响应,USB插口无反应怎么办?USB接口不能用解决办法
  8. LeetCode--704.二分查找(C++)
  9. 使用openCV进行视频人脸识别
  10. STL string容器 构造,查找,替换,拼接,比较,截取,插入删除