fixed rds ak/sk config for manager

This commit is contained in:
七锋
2018-10-24 16:46:26 +08:00
parent 575dd59c78
commit 9270834631
3 changed files with 89 additions and 4 deletions

View File

@@ -6,7 +6,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import com.alibaba.otter.canal.meta.FileMixedMetaManager; import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -39,7 +39,16 @@ import com.alibaba.otter.canal.parse.inbound.AbstractEventParser;
import com.alibaba.otter.canal.parse.inbound.group.GroupEventParser; import com.alibaba.otter.canal.parse.inbound.group.GroupEventParser;
import com.alibaba.otter.canal.parse.inbound.mysql.LocalBinlogEventParser; import com.alibaba.otter.canal.parse.inbound.mysql.LocalBinlogEventParser;
import com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser; import com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser;
import com.alibaba.otter.canal.parse.index.*; import com.alibaba.otter.canal.parse.inbound.mysql.rds.RdsBinlogEventParserProxy;
import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DefaultTableMetaTSDBFactory;
import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.TableMetaTSDB;
import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.TableMetaTSDBBuilder;
import com.alibaba.otter.canal.parse.index.CanalLogPositionManager;
import com.alibaba.otter.canal.parse.index.FailbackLogPositionManager;
import com.alibaba.otter.canal.parse.index.MemoryLogPositionManager;
import com.alibaba.otter.canal.parse.index.MetaLogPositionManager;
import com.alibaba.otter.canal.parse.index.PeriodMixedLogPositionManager;
import com.alibaba.otter.canal.parse.index.ZooKeeperLogPositionManager;
import com.alibaba.otter.canal.parse.support.AuthenticationInfo; import com.alibaba.otter.canal.parse.support.AuthenticationInfo;
import com.alibaba.otter.canal.protocol.position.EntryPosition; import com.alibaba.otter.canal.protocol.position.EntryPosition;
import com.alibaba.otter.canal.sink.entry.EntryEventSink; import com.alibaba.otter.canal.sink.entry.EntryEventSink;
@@ -229,7 +238,18 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
private CanalEventParser doInitEventParser(SourcingType type, List<InetSocketAddress> dbAddresses) { private CanalEventParser doInitEventParser(SourcingType type, List<InetSocketAddress> dbAddresses) {
CanalEventParser eventParser; CanalEventParser eventParser;
if (type.isMysql()) { if (type.isMysql()) {
MysqlEventParser mysqlEventParser = new MysqlEventParser(); MysqlEventParser mysqlEventParser = null;
if (StringUtils.isNotEmpty(parameters.getRdsAccesskey())
&& StringUtils.isNotEmpty(parameters.getRdsSecretkey())
&& StringUtils.isNotEmpty(parameters.getRdsInstanceId())) {
mysqlEventParser = new RdsBinlogEventParserProxy();
((RdsBinlogEventParserProxy) mysqlEventParser).setAccesskey(parameters.getRdsAccesskey());
((RdsBinlogEventParserProxy) mysqlEventParser).setSecretkey(parameters.getRdsSecretkey());
((RdsBinlogEventParserProxy) mysqlEventParser).setInstanceId(parameters.getRdsInstanceId());
} else {
mysqlEventParser = new MysqlEventParser();
}
mysqlEventParser.setDestination(destination); mysqlEventParser.setDestination(destination);
// 编码参数 // 编码参数
mysqlEventParser.setConnectionCharset(Charset.forName(parameters.getConnectionCharset())); mysqlEventParser.setConnectionCharset(Charset.forName(parameters.getConnectionCharset()));
@@ -273,6 +293,34 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
mysqlEventParser.setFallbackIntervalInSeconds(parameters.getFallbackIntervalInSeconds()); mysqlEventParser.setFallbackIntervalInSeconds(parameters.getFallbackIntervalInSeconds());
mysqlEventParser.setProfilingEnabled(false); mysqlEventParser.setProfilingEnabled(false);
mysqlEventParser.setFilterTableError(parameters.getFilterTableError()); mysqlEventParser.setFilterTableError(parameters.getFilterTableError());
mysqlEventParser.setIsGTIDMode(BooleanUtils.toBoolean(parameters.getGtidEnable()));
// tsdb
boolean tsdbEnable = BooleanUtils.toBoolean(parameters.getTsdbEnable());
if (tsdbEnable) {
mysqlEventParser.setEnableTsdb(tsdbEnable);
mysqlEventParser.setTableMetaTSDBFactory(new DefaultTableMetaTSDBFactory() {
@Override
public void destory(String destination) {
TableMetaTSDBBuilder.destory(destination);
}
@Override
public TableMetaTSDB build(String destination, String springXml) {
try {
System.setProperty("canal.instance.tsdb.url", parameters.getTsdbJdbcUrl());
System.setProperty("canal.instance.tsdb.dbUsername", parameters.getTsdbJdbcUserName());
System.setProperty("canal.instance.tsdb.dbPassword", parameters.getTsdbJdbcPassword());
return TableMetaTSDBBuilder.build(destination, "classpath:spring/tsdb/mysql-tsdb.xml");
} finally {
System.setProperty("canal.instance.tsdb.url", "");
System.setProperty("canal.instance.tsdb.dbUsername", "");
System.setProperty("canal.instance.tsdb.dbPassword", "");
}
}
});
}
eventParser = mysqlEventParser; eventParser = mysqlEventParser;
} else if (type.isLocalBinlog()) { } else if (type.isLocalBinlog()) {
LocalBinlogEventParser localBinlogEventParser = new LocalBinlogEventParser(); LocalBinlogEventParser localBinlogEventParser = new LocalBinlogEventParser();
@@ -291,8 +339,8 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
parameters.getDbUsername(), parameters.getDbUsername(),
parameters.getDbPassword(), parameters.getDbPassword(),
parameters.getDefaultDatabaseName())); parameters.getDefaultDatabaseName()));
} }
eventParser = localBinlogEventParser; eventParser = localBinlogEventParser;
} else if (type.isOracle()) { } else if (type.isOracle()) {
throw new CanalException("unsupport SourcingType for " + type); throw new CanalException("unsupport SourcingType for " + type);

View File

@@ -97,6 +97,10 @@ public class CanalParameter implements Serializable {
private String tsdbJdbcUrl; private String tsdbJdbcUrl;
private String tsdbJdbcUserName; private String tsdbJdbcUserName;
private String tsdbJdbcPassword; private String tsdbJdbcPassword;
private String rdsAccesskey;
private String rdsSecretkey;
private String rdsInstanceId;
private Boolean gtidEnable = Boolean.FALSE; // 是否开启gtid
// ================================== 兼容字段处理 // ================================== 兼容字段处理
private InetSocketAddress masterAddress; // 主库信息 private InetSocketAddress masterAddress; // 主库信息
private String masterUsername; // 帐号 private String masterUsername; // 帐号
@@ -919,6 +923,38 @@ public class CanalParameter implements Serializable {
this.tsdbJdbcPassword = tsdbJdbcPassword; this.tsdbJdbcPassword = tsdbJdbcPassword;
} }
public String getRdsAccesskey() {
return rdsAccesskey;
}
public void setRdsAccesskey(String rdsAccesskey) {
this.rdsAccesskey = rdsAccesskey;
}
public String getRdsSecretkey() {
return rdsSecretkey;
}
public void setRdsSecretkey(String rdsSecretkey) {
this.rdsSecretkey = rdsSecretkey;
}
public String getRdsInstanceId() {
return rdsInstanceId;
}
public void setRdsInstanceId(String rdsInstanceId) {
this.rdsInstanceId = rdsInstanceId;
}
public Boolean getGtidEnable() {
return gtidEnable;
}
public void setGtidEnable(Boolean gtidEnable) {
this.gtidEnable = gtidEnable;
}
public String toString() { public String toString() {
return ToStringBuilder.reflectionToString(this, CanalToStringStyle.DEFAULT_STYLE); return ToStringBuilder.reflectionToString(this, CanalToStringStyle.DEFAULT_STYLE);
} }

View File

@@ -38,6 +38,7 @@ public class Message implements Serializable {
} else { } else {
this.entries = entries == null ? new ArrayList<Entry>() : entries; this.entries = entries == null ? new ArrayList<Entry>() : entries;
} }
this.raw = raw;
} }
public Message(long id){ public Message(long id){