-
Notifications
You must be signed in to change notification settings - Fork 6.7k
fix: 修复 MongoDB Change Streams 主节点切换时断连无法重连问题 #5738
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: v4.13.1-dev
Are you sure you want to change the base?
fix: 修复 MongoDB Change Streams 主节点切换时断连无法重连问题 #5738
Conversation
- 问题描述:当大量推送数据到知识库时,MongoDB 主节点切换会导致 Change Streams 进程挂掉,数据消费变慢,需要重启服务 - 修复内容: 1. 为所有 Change Stream 实现添加错误处理和自动重连机制 2. 添加 error 和 close 事件监听器,实现延迟重连 3. 增强日志记录,便于问题排查 4. 提供清理函数,确保资源正确释放 - 影响文件: - packages/service/core/ai/config/utils.ts (watchSystemModelUpdate) - projects/app/src/service/common/system/volumnMongoWatch.ts (reloadConfigWatch, refetchAppTemplates, startMongoWatch) - projects/app/src/service/core/dataset/training/utils.ts (createDatasetTrainingMongoWatch) - 解决场景:MongoDB 主节点切换时 Change Streams 自动重连,避免服务中断
- 保存 startMongoWatch 返回的 cleanup 函数 - 添加进程信号监听 (SIGTERM, SIGINT, SIGUSR2) - 在应用关闭时正确清理所有 Change Streams 连接 - 防止资源泄漏和连接积累问题 修复文件: projects/app/src/instrumentation.ts
TestGru AssignmentSummary
Tip You can |
|
1 similar comment
|
Preview sandbox Image:
|
Preview mcp_server Image:
|
代码似乎不通用,其他 change streams 没有生效。 |
是的, 重新链接以后,change streams 这个进程就挂掉了,就只剩下定时任务,一次性只消费一条数据,老慢了。 |
隆哥,不通用没关系, 我可以close掉, 但是这个问题肯定是客观存在的, 如果是mongodb单节点没问题,但是如果是副本集肯定是有问题的。 但是我觉得这个影响工程的健壮性,建议修复一下。 |
🐛 问题描述
在海量数据到知识库时(4000万条dataset_collections),MongoDB由于压力过大,切换主节点导致Change Streams断连且无法自动重连,造成:
✨ 解决方案
1️⃣ Change Streams 自动重连机制
error
和close
事件处理createWatch
函数确保一致性2️⃣ 应用优雅关闭
📁 修改文件
packages/service/core/ai/config/utils.ts
- 系统模型配置监听projects/app/src/service/common/system/volumnMongoWatch.ts
- 系统配置和模板监听projects/app/src/service/core/dataset/training/utils.ts
- 数据集训练监听projects/app/src/instrumentation.ts
- 应用启动和关闭处理🧪 测试场景