rwadurian/backend/services/identity-service/src
hailin 7ee6d633c6 fix(kafka): 修复 MPC Kafka consumer 启动订阅失败后不重试的问题
问题现象:
- blockchain-service 启动时 Kafka consumer subscribe() 抛出
  "This server does not host this topic-partition" 错误
- 原实现只 try-catch 一次就放弃,consumer 永久失效
- 后续所有 MPC 签名结果都收不到,表现为 signing timeout 300s
- 需要手动 docker restart 才能恢复

根因分析:
- 服务启动时 Kafka broker 可能尚未完成 topic-partition 分配
  (特别是容器编排环境中服务启动顺序不确定)
- onModuleInit() 中的 connect/subscribe/run 是一次性调用
- KafkaJS 的 retry 配置只作用于内部操作,不覆盖初始连接流程

修复方案:
- 新增 connectWithRetry() 方法:指数退避重试(2s→4s→8s→...→60s)
  最多 10 次,总等待约 5 分钟
- 每次重试前断开连接清理状态,避免 KafkaJS 内部状态残留
- 监听 consumer CRASH 事件:当 KafkaJS 不自动重启时(restart=false)
  手动触发 connectWithRetry() 重连
- 新增 isShuttingDown 标志:防止 onModuleDestroy 时触发无意义的重连
- 同时修复 blockchain-service 和 identity-service 两个 consumer

影响范围:
- blockchain-service: 影响 MPC 签名结果接收(热钱包转账)
- identity-service: 影响 MPC 密钥生成结果接收(用户钱包创建)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 19:18:10 -08:00
..
api feat(wallet/blockchain/identity): implement system account withdrawal feature 2026-01-06 10:22:15 -08:00
application fix: 修复 mining-blockchain-service Kafka consumer group 冲突 2026-01-28 22:05:55 -08:00
config feat: 实现手机号+密码登录和账号恢复功能 2025-12-20 20:35:44 -08:00
domain fix: 修复 mining-blockchain-service Kafka consumer group 冲突 2026-01-28 22:05:55 -08:00
infrastructure fix(kafka): 修复 MPC Kafka consumer 启动订阅失败后不重试的问题 2026-02-02 19:18:10 -08:00
shared feat(identity): 改用创意组合名字替代序号命名 2025-12-24 00:25:03 -08:00
app.module.ts feat(pending-actions): add user pending actions system 2026-01-02 18:22:51 -08:00
main.ts feat: 实现手机号+密码登录和账号恢复功能 2025-12-20 20:35:44 -08:00