8000 建议新增ReportSlave消息 · Issue #483 · alibaba/canal · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
建议新增ReportSlave消息 #483
Closed
@zhibinliu

Description

@zhibinliu

现在连上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,从配置文件中拿的。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0