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

问题描述

我需要为多用户(约1000个用户)应用程序设计一个通知系统,这是高级要求。

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

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

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

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

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

  2. 请考虑这种情况-生成通知并存储在队列中,并且用户登录,这是处理使用者消息的最佳方法

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

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

还有其他推荐的方式吗?

谢谢

解决方法

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