东方美食例如每个用户都有一张关注问题的列表

由于文章篇幅较长,而作者精力有限,不希望这么早就精尽人亡,故分成上下篇来写消息系统的设计与实现。上篇主要讲的是一些概念,搞清楚我们要做的这个消息系统的主要内容。而......

  由于文章篇幅较长,而作者精力有限,不希望这么早就精尽人亡,故分成上下篇来写消息系统的设计与实现。上篇主要讲的是一些概念,搞清楚我们要做的这个消息系统的主要内容。而下篇主要讲具体的实现,会包括架构设计,数据库设计,业务流程详细的实现等。

  整个系统的设计与实现,并非我一人之力就可以完成的。这其中是同事们大家一起讨论与商讨的结果,而我只是把它细化,呈现出来。

  简信的性质其实跟私信是一样的,是用户发送给用户的一则消息,有具体的信息内容。

  而提醒,则是系统发送的一则消息,其文案格式是固定的,并且对特殊对象一般拥有超链接。

  跟简书一样,使用户发送给用户的一则消息,也可以是管理员发送给用户的消息。

  知乎的消息比简书的提醒有过之而无不及,知乎会对多条相似的消息进行聚会,以达到减轻用户阅读压力的体验。

  通过两种产品的简单分析,得出他们的消息有两种分类,在这基础上,我们再加上一种:公告。

  公告的主要性质是系统发送一则含有具体内容的消息,站内所有用户都能读取到这条消息。

  do something = 提醒的动作,评论、喜欢、关注都属于一个动作,标记为action

  something = 提醒的动作作用对象,这就具体到是哪一篇文章,标记为target

  这就清楚了,sender和targetOwner就是网站的用户,而target是具体到哪一篇文章,如果提醒的对象不仅仅局限于文章,还有其他的话,就需要增加一项targetType,来标记目标是文章还是其他的什么。而action,则是固定的,整个网站会触发提醒的动作可能就只有那几样:评论、喜欢、关注.....(或者其他业务需要提醒的动作)

  推的比较常见,需要针对某一个问题维护着一张关注者的列表,每当触发这个问题推送的条件时(例如有人回答问题),就把这个通知发送给每个关注者。

  拉的相对麻烦一点,就是推的反向,例如每个用户都有一张关注问题的列表,每当用户上线的时候,对每个问题进行轮询,当问题的事件列表出现了比我原本时间戳大的信息就进行拉取。

  通告和提醒,适合使用拉取的方式,消息产生之后,会存在消息表中,用户在某一特定的时间根据自己关注问题的表进行消息的拉取,然后添加到自己的消息队列中,

  信息,适合使用推的方式,在发送者建立一条信息之后,同时指定接收者,把消息添加到接收者的消息队列中。

  比如我发布了一篇文章,那么我会订阅文章《XXX》的评论动作,所以文章《XXX》每被人评论了,东方美食就需要发送一则提醒告知我。

  用户可能会有一个自己的订阅设置,比如对于所有的喜欢的动作,我都不希望接收。

  所以我们需要再维护一个表:SubscriptionConfig,来存放用户的提醒设置。

  并且,当用户没有提醒设置的时候,可以使用系统提供的一套默认设置:defaultSubscriptionConfig

  如果我发布了一篇文章《XXX》,在我不在线遍,当我一上线的时候,应该是收到十条信息类似于:「谁谁谁评论了你的文章《XXX》」?

  还是应该收到一条信息:「甲、乙、丙、丁...评论了你的文章《XXX》」?

  关于这部分功能,我们还没有具体的实现方法,暂时也无法讲得更加详细。⊙﹏⊙

  在本文的「下篇」我们来探讨一下:模型怎么做、数据库怎么设计、代码结构怎么来、一些逻辑上的时序图应该是怎么样的。

  关联文章:消息系统设计与实现「上篇」 模型设计 Notify Save Remind消息表,我们需要target、...

  背景 在一个系统中,资源,数据会持续不断的更新。而用户如果需要知道这些数据的更新,就需要一个系统,将系统中不断更新...

  Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...

  点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...

  看过很多产品设计的文章,很少有对消息系统这个模块的设计讲得比较清晰的,最近搜集了一些资料,结合实际例子梳理了消息系...

上一篇:固定设置在支架上.安装结构包括:待安装件和东方美食上述的架 下一篇:东方美食认证成功后本次下载的费用将由您所在的图书馆支付

水果沙拉

海带怎么做好吃?推荐凉拌海带丝
开胃健脾:糖醋鲤鱼的做法介绍
健脾开胃的水果羹
端午节粽子馅甜咸大战争议大 “北甜PK南咸”胜
麦兜下午茶:菠萝油
各种饺子的花式包法