Closed
Description
现在连上Mysql时,连接成功后就直接RequestDump了,所以在Mysql上敲show slave hosts,看不到当前这条Canal连接。虽然不影响数据同步,但对于强迫症来说,好不舒服。
解决方案是在RequestDump之前发一条ReportSlave消息上报自己,再收回一条OK消息,就可以了。
消息内容代码如下:
RegisterSlaveCommandPacket.java.txt
然后在MysqlConnection.java中增加如下函数,在dump()中调用就好了。
private void sendRegisterSlave() throws IOException {
RegisterSlaveCommandPacket cmd = new RegisterSlaveCommandPacket();
cmd.setReport_host(canalHost);
cmd.setReport_port(canalPort);
cmd.setReport_user(connector.getUsername());
cmd.setServerid(slaveId);
byte[] cmdBody = cmd.toBytes();
logger.info("Register slave {}", cmd);
HeaderPacket header = new HeaderPacket();
header.setPacketBodyLength(cmdBody.length);
header.setPacketSequenceNumber((byte) 0x00);
PacketManager.write(connector.getChannel(), new ByteBuffer[] { ByteBuffer.wrap(header.toBytes()),
ByteBuffer.wrap(cmdBody) });
ByteBuffer dest = ByteBuffer.allocate(1024);
connector.getChannel().read(dest);
}
其中的变量我是通过改Spring的xml,从配置文件中拿的。