如果我们都用IP那没问题 但是如果用hostname的话,跨机房同步的话,canal的mysql信息会在manager那端取出来并反序列化为InetSocketAddress对象,同时InetSocketAddress对象会解析出ip地址,但是这个ip地址是和manger在同一机房的内网的mysql的地址,然后该InetSocketAddress对象被传送到另一机房的node中,该node直接用该InetSocketAddress对象去连接mysql,就会出现错误了
所以用InetSocketAddress来存储终究不妥
现在粗略的修改方法为:在MysqlConnector的public MysqlConnector(InetSocketAddress address, String username, String password)方法中重新构造一个InetSocketAddress对象让其再进行一次ns解析,代码如下:
String addr = address.getHostString();
int port = address.getPort();
this.address = new InetSocketAddress(addr, port);
原提问者GitHub用户 whaon
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。