开发者社区> 问答> 正文

单Server情况下ClusterCanalConnector在与server断开重连时NullPo

以getWithoutAck方法举例:

while (times < retryTimes) { try { Message msg = currentConnector.getWithoutAck(batchSize); return msg; } catch (Throwable t) { logger.warn("something goes wrong when getWithoutAck data from server:{}\n{}", currentConnector.getAddress(), ExceptionUtils.getFullStackTrace(t)); times++; restart(); logger.info("restart the connector for next round retry."); } }

当与server连接断开(网络原因或server被停止)时currentConnector.getWithoutAck抛出异常,进入restart方法,在调用connect方法依然连接失败时,会将currentConnector置为null,超过重试次数后抛出Exception。此时再次尝试调用getWithoutAck方法时,因currentConnector为null,currentConnector.getWithoutAck抛出NullPotionException,然后被catch住,在 logger.warn打印日志的时候使用了currentConnector,又会抛出NullPotionException,从而导致restart方法无法被执行。在server恢复后,由于相同原因,客户端依然无法连接上server。

1.0.26-SNAPSHOT 版本上,getWithoutAck并没有对这个问题做修改,请问是出于什么考虑?

原提问者GitHub用户ql927520

展开
收起
绿子直子 2023-05-09 15:19:33 65 0
1 条回答
写回答
取消 提交回答
  • 估计遗漏了

    原回答者GitHub用户agapple

    2023-05-10 10:37:10
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载