前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Echo 的系统通知模块是怎么做的

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

作者头像
飞天小牛肉
发布2021-07-21 17:11:04
6470
发布2021-07-21 17:11:04
举报
文章被收录于专栏:飞天小牛肉飞天小牛肉

概述

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

对于流量巨大的社交网站,系统通知的需求是非常庞大的,那如果只是和私信或者发帖功能一样单纯地用 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。以点赞事件为例,看下图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 飞天小牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 封装事件对象
    相关产品与服务
    消息队列 CMQ 版
    消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档