java dataentry,Java CanalEntry.RowData方法代码示例

import com.alibaba.otter.canal.protocol.CanalEntry; //导入方法依赖的package包/类

@Override

public int processHeartBeatMessage(Map> map, IGenericMessage obj) throws IOException {

MysqlGenericMessage message = (MysqlGenericMessage) obj;

CanalEntry.Entry entry = message.getEntry();

CanalEntry.EventType eventType = entry.getHeader().getEventType();

if(eventType != CanalEntry.EventType.INSERT) {

//skip it.

logger.info ("Skipped a DB_HEARTBEAT_MONITOR message which is not INSERT Type! :" + eventType.toString());

return -1;

}

CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue());

List dataList = rowChange.getRowDatasList();

if (dataList.size() != 1) {

throw new RuntimeException(String.format("DB_HEARTBEAT_MONITOR 发现 %d 条bach数据,应该只有一条", dataList.size()));

}

String dsName = null;

String schemaName = null;

String tableName = null;

String packetJson = null;

List columns = dataList.get(0).getAfterColumnsList();

for (CanalEntry.Column column : columns) {

if (column.getName().equalsIgnoreCase("DS_NAME")) {

dsName = column.getValue();

} else if (column.getName().equalsIgnoreCase("SCHEMA_NAME")) {

schemaName = column.getValue();

} else if (column.getName().equalsIgnoreCase("TABLE_NAME")) {

tableName = column.getValue();

} else if (column.getName().equalsIgnoreCase("PACKET"))

packetJson = column.getValue();

}

if (dsName == null || schemaName == null || tableName == null || packetJson == null) {

throw new RuntimeException("DB_HEARTBEAT_MONITOR 发现 dsName 或 schema 或 table, 或 packetJson 为空.");

}

if (!dsName.equalsIgnoreCase(dsInfo.getDbSourceName())) {

logger.info("Skipped other datasource HeartBeat! : {}.{}.{}" , dsName, schemaName, tableName);

return -1;

}

//logger.info(String.format("Get DB_HEARTBEAT_MONITOR message : %s.%s", schemaName, tableName));

if (packetJson.indexOf("checkpoint") >= 0) {

HeartBeatPacket packet = HeartBeatPacket.parse(packetJson);

statMeter(schemaName, tableName, packet.getTime(), packet.getTxtime());

}

List subList = map.get(schemaName);

if (subList != null) {

subList.add(message);

} else {

subList = new ArrayList<>();

subList.add(message);

map.put(schemaName, subList);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值