针对报告的评论的邮件和在线消息通知系统设计
目的: 实现一个评论系统,允许用户对报告进行评论。 当新评论创建时,生成通知并存储到队列中。 通过邮件和实时 SSE 向相关用户发送通知。 确保通知系统的可静性、实时性和可扩展性。 处理用户在线/离线状态,确保通知能够及时送达在线用户。 设计说明: 数据模型:使用 PostgreSQL 数据库,通过 Bun ORM 进行数据操作。 Web 框架:使用 Chi 作为 HTTP 路由器。 通知机制:实现了一个基于队列的通知系统,支持邮件和 SSE 实时通知。 异步处理:使用 Go 协程处理通知,避免阻塞主请求。 实时通信:使用 Server-Sent Events (SSE) 实现实时通知。 会话管理:实现了基本的用户认证和会话跟踪机制。 架构图: ![[Pasted image 20240719115045.png]] 详细说明: 数据模型: 使用 Bun ORM 定义 Comment, Report, User, 和 NotificationQueue 模型。 NotificationQueue 用于存储待处理的通知。 评论创建与通知触发: 使用 Chi 中间件在评论创建后触发通知处理。 通知处理器将通知信息插入 NotificationQueue。 通知处理: 定时任务定期检查 NotificationQueue,处理待发送的通知。 对于邮件通知,直接发送邮件。 对于 SSE 通知,检查用户是否在线,如果在线则发送,否则保持待发送状态。 SSE 实现: 为每个在线用户维护一个 SSE 连接。 实现用户认证,确保只有登录用户可以建立 SSE 连接。 使用心跳机制保持连接活跃,并跟踪用户活动状态。 定期清理不活跃的连接。 会话管理: 实现基本的用户认证机制。 使用内存映射跟踪用户会话和最后活动时间。 详细代码: 数据模型 (models....