❓❓❓关于消息通知的一些疑问讨论

需求是:给公众号推送消息、小程序推送消息、数据库记录并在页面可以查询显示消息,未来会增加app消息推送

我的想法:

利用laravel自带的消息通知【https://learnku.com/docs/laravel/9.x/notifications/12234】,
根据业务分别创建通知【php artisan make:notification XXX】,举例:违规通知、奖励通知、聊天通知等等
每个通知类都有一个 via 方法,分别创建公众号消息通道、小程序消息通道、数据的通道,如果有别的端就继续增加通道
每个通知类里面都会初始化一个data,这个data的格式按公众号消息模板,其他通道接收到再转换
消息未读这些功能自带

我的顾虑:

1、消息通知发送【$user->notify(new InvoicePaid($invoice));】意味发送都要查询user模型出来,但有些业务专门查一下user再发送,感觉有点浪费🤔,例如:A给B点了个赞,就需要查询B的user模型再发送,不知道有没有不需要查询user模型发送的方式
2、如果同时给很多人发送?例如:A发了一个帖子,要推送给所有关注A的人,假设有1000人关注,那是要遍历发送吗?

以上是个人一些推想,目前还未开整,有实战的大师可以指点指点,不一定局限laravel再带的消息通知,解决需求就行😄

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

考虑下把消息处理系统弄成常驻,这样的话可以处理数据在内存里常驻

1年前 评论
臭鼬 (楼主) 1年前
Ghwolf (作者) 1年前
陈先生

说下主播发帖,粉丝得到消息的场景吧,可能相对贴合你的问题

  • 诉求

主播发帖后,粉丝都要收到消息或者推送等

  • 问题

我觉得如果关注的人太多,如果 loop 及时发送的话不是一个很好的解决方案,或者说对于我来说 可能对关注量不是很清楚,如果有数量非常大的数据一下子需要处理,我可能在响应时间内处理不完,etc。。。

  • 解决方案

最典型的消息队列解耦业务场景,最典型的 事件 解耦场景。 但是 如果你使用 Laravel 框架,你会发现 事件和队列可以是一个东西

  • Example
  1. 创建事件 PostPublishedEvent , 接受 $post, $user 作为事件结构体。

    伪代码

    file

  1. 创建 Listener PushNoticeToFans 并实现 ShouldQueue 这里请自行参照文档,仅仅是将 listener 置于 queue 执行,不会占用前台用户响应时间。

    这个监听器的作用仅仅是用来调度任务,并不会执行发送的行为,这个事件的意义在于 帮你找到所有关注这个主播的用户,以及构建一条稳定的发送内容。
    伪代码如下

    file

  1. 创建一个 QueueJob 用来发送消息 至于你发送消息的流程你自己来吧。。

  2. 后面可以添加一个 systemd 来守护进程 或者是 supervisor,不要用定时任务就好了

    systemd 样例

    file

1年前 评论
臭鼬 (楼主) 1年前
陈先生 (作者) 1年前
臭鼬 (楼主) 1年前
陈先生 (作者) 1年前
臭鼬 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!