Skip to content

fix: 修复对外服重连后未向网关重新注册导致的 NPE 问题 - #544

Open
mcqwy wants to merge 1 commit into
iohao:mainfrom
mcqwy:reconnect-retry
Open

fix: 修复对外服重连后未向网关重新注册导致的 NPE 问题#544
mcqwy wants to merge 1 commit into
iohao:mainfrom
mcqwy:reconnect-retry

Conversation

@mcqwy

@mcqwy mcqwy commented Aug 29, 2026

Copy link
Copy Markdown
Contributor
  • 问题现象:网关重启后,对外服(包括逻辑服)虽能自动恢复物理连接,但未重新执行业务注册,导致 BrokerClientManager 中无可用连接,后续请求抛出 NullPointerException(nextClient 为 null)。
  • 根本原因:Bolt 的 CONN_RECONNECT_SWITCH 仅负责重连,不会触发业务注册;原代码只在启动时注册一次,缺乏重连后的注册恢复机制。
  • 解决方案:
    1. 在 BrokerClientItem.startup() 中为 CONNECT 事件添加处理器,当物理连接建立时自动调用 tryConnect() 执行握手和注册。
    2. 为 CLOSE 事件添加处理器,重置连接状态并取消重试任务,确保下次 CONNECT 时能重新注册。
    3. 增加重试机制(DelayTaskKit),注册失败时按配置间隔重试,避免临时性故障导致服务不可用。
    4. 优化日志输出,所有相关日志均带上逻辑服名称(appName),便于多服务场景下快速定位。
  • 影响范围:仅影响 BrokerClientItem 的行为,对外接口无变更,向后兼容。
  • 测试:模拟网关重启,确认对外服自动重新注册成功,后续请求正常处理,NPE 不再出现。

- 问题现象:网关重启后,对外服虽能自动恢复物理连接,但未重新执行业务注册,导致 BrokerClientManager 中无可用连接,后续请求抛出 NullPointerException(nextClient 为 null)。
- 根本原因:Bolt 的 CONN_RECONNECT_SWITCH 仅负责重连,不会触发业务注册;原代码只在启动时注册一次,缺乏重连后的注册恢复机制。
- 解决方案:
  1. 在 BrokerClientItem.startup() 中为 CONNECT 事件添加处理器,当物理连接建立时自动调用 tryConnect() 执行握手和注册。
  2. 为 CLOSE 事件添加处理器,重置连接状态并取消重试任务,确保下次 CONNECT 时能重新注册。
  3. 增加重试机制(DelayTaskKit),注册失败时按配置间隔重试,避免临时性故障导致服务不可用。
  4. 优化日志输出,所有相关日志均带上逻辑服名称(appName),便于多服务场景下快速定位。
- 影响范围:仅影响 BrokerClientItem 的行为,对外接口无变更,向后兼容。
- 测试:模拟网关重启,确认对外服自动重新注册成功,后续请求正常处理,NPE 不再出现。
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 duplication

Metric Results
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@mcqwy

mcqwy commented Aug 29, 2026

Copy link
Copy Markdown
Contributor Author

抱歉可能写的部分有些误导,我发现原框架RequestBrokerClientModuleMessageClientProcessor自带重连注册机制,但依赖网关主动发送请求,可能属于被动响应式。
添加的 CONNECT 处理器是更主动的触发方式,作为补充和增强,确保了注册的及时性和可靠性。
框架没怎么吃透,希望作者可以审阅一下提交的代码,如果有不正确的地方请指出

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant