多用户应用的通知系统设计

Notification System Design for Multi User Application

我有一个为多用户(~1000 个用户)应用程序设计通知系统的请求ui备注,这里是高级请求ui备注。

  1. 特定操作触发系统事件。
  2. 在事件触发时,将生成针对所有(或有时仅针对相关)用户的单独通知并将其存储在数据库中。
  3. 当用户登录时,他的所有未读通知将被拉取并显示在ui。
  4. 当用户阅读通知时,我们捕获阅读状态。
  5. 后台的调度程序驱逐所有过时的通知。

这似乎是一个非常典型的用例,可以直接用数据库实现。

但我的疑问是,有没有什么方法可以用基于 Queue 的消息传递系统替换数据库?我这样想的原因是,我的用例本质上似乎是异步的(比如事件、通知和及时驱逐消息)。

虽然我用队列替换了数据库,但上面的前两点很合适,但后面我有一些疑问 -

  1. 一般来说,队列是否可以灵活地根据用户 ID 存储和查询通知?

  2. 考虑这种情况 - 通知生成并存储在队列中,用户未登录,处理消费者消息的最佳方式是什么。

    一个。消费者是否应该不断地收听消息?如果是这样,消息是否应该存储在应用程序内存中(似乎不是一个好的选择)?

    b。或者应该在用户登录时为每个用户动态创建消费者?这是常规模式吗?

还有其他推荐的方式吗?

谢谢

您的 use-case 适用于数据库,而不是消息队列。虽然在概念上类似于用例,但消息队列旨在用于极其 short-duration 存储(即缓冲在 运行 进程之间移动的数据)。由于您无法控制用户何时登录,因此这些通知可能会存储几分钟、几小时甚至几周。你需要一个持久化的存储机制。