以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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。