我有一个为多用户(约1000个用户(应用程序设计通知系统的需求,以下是高级需求。
- 特定操作会触发系统事件
- 在事件触发时,将生成针对所有(有时仅针对相关(用户的单独通知并将其存储在数据库中
- 当用户登录时,所有未读的通知都会被拉入并显示在ui中
- 当用户读取通知时,我们会捕获读取状态
- 后台的调度程序会收回所有过时的通知
这似乎是一个非常典型的用例,可以直接用数据库实现。
但我的疑问是,我们有没有办法用基于队列的消息传递系统取代数据库?我这样想的原因是,我的用例在本质上似乎是异步的(比如事件、通知和消息的及时驱逐(。
当我用队列替换数据库时,上面的前2个点很合适,但在后面的部分中,我有一些疑问-
-
通常,队列是否可以灵活地存储和查询基于用户ID的通知?
-
考虑一下这个场景——生成通知并将其存储在队列中,而用户没有登录,处理消费者消息的最佳方式是什么。
a。消费者是否应该不断地倾听信息?,如果是这样,消息应该存储在应用程序内存中吗(这似乎不是一个好的选择(?
b。还是应该在用户登录时为每个用户动态创建消费者?这是常规模式吗?
还有其他推荐的方法吗?
感谢
您的用例适用于数据库,而不是消息队列。虽然在概念上与用例类似,但消息队列用于极短的持续时间存储(即缓冲在运行的进程之间移动的数据(。由于您无法控制用户登录的时间,这些通知可能会存储数分钟、数小时甚至数周。您需要一个持久的存储机制。