开发者社区 问答 正文

单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 106 分享 版权
1 条回答
写回答
取消 提交回答
  • 估计遗漏了

    原回答者GitHub用户agapple

    2023-05-10 10:37:10
    赞同 展开评论
问答分类:
问答地址: