专栏首页飞天小牛肉Echo 的系统通知模块是怎么做的

Echo 的系统通知模块是怎么做的

概述

系统通知是一个很常见且必要的需求,当发生点赞、关注、评论操作的时候,系统就会给相应的用户发送通知。

对于流量巨大的社交网站,系统通知的需求是非常庞大的,那如果只是和私信或者发帖功能一样单纯地用 Ajax 做个异步,显然是远远不够的。所以为了保证系统的性能,这里非常有必要使用消息队列(消息队列三大作用:解耦、异步、消峰),Echo 中选用的是 Kafka。

整体来看就两个需求,发送系统通知和显示系统通知:

1)发送系统通知:

  • A 给 B 点赞,给 B 发送 点赞 类型的系统通知(TOPIC_LIKE
  • A 给 B 点赞,给 B 发送 关注 类型的系统通知(TOPIC_FOLLOW
  • A 给 B 点赞,给 B 发送 评论 类型的系统通知(TOPIC_COMMNET

整体逻辑就是,当发生比如点赞操作的时候,就会触发消息队列的点赞事件,然后消费者消费这个事件,具体的消费逻辑就是往系统通知表里面插入一条数据(系统通知也使用私信那张表 message,不过系统通知的 from_id 在代码里写死了为 1,表示是系统发送出来的,所以这也就是为什么说大家在部署的时候一定要注意在 user 表中事先存储一个 id = 1 的用户)。

2)显示系统通知:

  • 系统通知列表(显示点赞、评论、关注三种类型的通知)
  • 系统通知详情(分页显示某一类型所包含的系统通知)
  • 显示未读消息数量

封装事件对象

各位不妨想一想,消费者想要通过消费这个消息实现往数据库表 message 中插入一条记录的目的,那么这个消息或者说事件是不是就应该具备 message 表中的所有字段,或者说从消息中能够推出这些字段,对吧。

另外,Kafka 是发布订阅模型,一对多,消息以 Topic(主题)进行分类,生产者将消息发布到某个Topic 中,消费者可以订阅该 Topic。以点赞事件为例,看下图:

本文分享自微信公众号 - 飞天小牛肉(CS-Wiki),作者:飞天小牛肉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Echo 的点赞模块是怎么做的

    需要特别注意的是,Redis key 命名需具有简洁性、可读性以及可管理性,根据阿里云的 Redis 开发规范,我们给 Redis key 起名的时候需要遵守这...

    飞天小牛肉
  • Echo 的关注模块是怎么做的

    关注的目标可以是用户、帖子等,在实现时将这些目标抽象为实体就行了,目前为止 Echo 中只实现了关注用户功能。

    飞天小牛肉
  • Echo 的发帖操作是怎么做的

    最常用最原始的,form 表单。通过 form 表单以 post/get 方式提交数据,当你点击 submit 按钮时,浏览器会把你在 input 里面输入的数...

    飞天小牛肉
  • Echo 的注册功能是怎么做的

    另外,默认未激活的用户状态 status=0 也会存入数据库,当然,我们会为该注册用户随机生成一个唯一的激活码一并存入数据库:

    飞天小牛肉
  • Echo 的发送私信是怎么做的

    这篇教程新鲜的东西不多,私信发送和帖子发布的做法如出一辙,都是使用 Ajax 异步实现,参见这篇文章:Echo 的发帖操作是怎么做的

    飞天小牛肉
  • Echo 的发布评论是怎么做的

    这样,处理发布评论这个逻辑的 Service 层方法就需要执行两次 DML 操作,所谓 DML 就是数据操纵语言, 属于 SQL 语言四大分类(数据查询语言 D...

    飞天小牛肉
  • 想知道聊天室系统是怎么做的吗?

    昨天TJ君碰到一个小学的好友,聊起当年的种种过往,感慨一晃就那么多年过去了,唏嘘不已,其中有聊到聊天室,在那个没有微信没有各种交友APP的年代,聊天室可是大家交...

    程序猿DD
  • Echo 的登录认证和授权是怎么做的

    首先,登录的时候会随机生成验证码,如何把这个验证码和当前用户对应起来,实现验证码的校验呢?

    飞天小牛肉
  • Echo 的帖子列表与分页是怎么做的

    业务逻辑这个模块的文章后续应该都会改成一元钱的付费文章了,emmm,算是一点精神上的慰藉吧。毕竟这种类型的文章不像 Java 八股文那样铺天盖地都是现成的博客、...

    飞天小牛肉
  • Echo 的私信列表与详情页是怎么做的

    需要注意的是:这张表不仅存储用户之间的私信,也存储系统通知,不同的是,系统通知的 from_id 特定为 1,而这个 id 为 1 的用户是我们手动内置进去的。

    飞天小牛肉
  • 开发知识 | 即时通讯是怎么做到的?

    即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传...

    APICloud官方
  • Netflix是怎样做系统监控的?

    作为知名的流媒体巨头,Netflix 在全球拥有近 2 亿订阅用户,服务遍及多个国家。本文阐述了 Netflix 的系统监控实践:自研 Telltale,成功运...

    深度学习与Python
  • 通用的底层埋点都是怎么做的?

    想要在程序里监控数据库的操作耗时,想要在底层框架中自动传递链路跟踪信息,这些需求经常会碰到,特别是在构建基础框架的时候。

    猿天地
  • 2020-09-24:jvm监控系统是通过jmx做的么?

    [此答案来自知乎:](https://www.zhihu.com/question/422632973)

    福大大架构师每日一题
  • 网络编程实战——IM系统是怎么通讯的

    普通程序员
  • 分布式系统如何设计,看看Elasticsearch是怎么做的

    分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大。这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分...

    Bug开发工程师
  • 文本识别系统是怎么“看”的

    用神经网络实现的现代文本识别系统的性能令人惊叹。他们可以接受中世纪文献的训练,能够阅读这些文献,并且只会犯很少的错误。这样的任务对我们大多数人来说都是非常困难的...

    AiTechYun
  • 推荐系统里,你是怎么Embedding的?

    如果是很高维度的类别特征呢?比如电商场景下的itemid,可以有上亿,然后可能会这样:

    炼丹笔记
  • 面试官:你的系统是怎么限流的?

    如果大家校招时准备的项目是秒杀系统,那除了会问 Redis 和 MySQL,还会问你是怎么限流的。这一块知识应该挺多人没有准备的。

    小林coding

扫码关注云+社区

领取腾讯云代金券