diff --git a/client-adapter/common/pom.xml b/client-adapter/common/pom.xml
index a581ec4c..eb3a21a3 100644
--- a/client-adapter/common/pom.xml
+++ b/client-adapter/common/pom.xml
@@ -18,16 +18,21 @@
canal.protocol
${canal_version}
-
- org.slf4j
- slf4j-api
- 1.7.12
-
joda-time
joda-time
2.9.4
+
+ com.alibaba
+ druid
+ 1.1.9
+
+
+ mysql
+ mysql-connector-java
+ 5.1.40
+
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/CanalOuterAdapter.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/CanalOuterAdapter.java
deleted file mode 100644
index 5fe0a377..00000000
--- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/CanalOuterAdapter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.alibaba.otter.canal.client.adapter;
-
-import com.alibaba.otter.canal.client.adapter.support.CanalOuterAdapterConfiguration;
-import com.alibaba.otter.canal.client.adapter.support.Dml;
-import com.alibaba.otter.canal.client.adapter.support.SPI;
-
-/**
- * 外部适配器接口
- *
- * @author machengyuan 2018-8-18 下午10:14:02
- * @version 1.0.0
- */
-@SPI("logger")
-public interface CanalOuterAdapter {
-
- /**
- * 外部适配器初始化接口
- *
- * @param configuration 外部适配器配置信息
- */
- void init(CanalOuterAdapterConfiguration configuration);
-
- /**
- * 往适配器中写入数据
- *
- * @param dml 数据包
- */
- void writeOut(Dml dml);
-
- // void writeOut(FlatMessage flatMessage);
-
- /**
- * 外部适配器销毁接口
- */
- void destroy();
-}
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/OuterAdapter.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/OuterAdapter.java
new file mode 100644
index 00000000..286ba398
--- /dev/null
+++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/OuterAdapter.java
@@ -0,0 +1,68 @@
+package com.alibaba.otter.canal.client.adapter;
+
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.otter.canal.client.adapter.support.Dml;
+import com.alibaba.otter.canal.client.adapter.support.EtlResult;
+import com.alibaba.otter.canal.client.adapter.support.OuterAdapterConfig;
+import com.alibaba.otter.canal.client.adapter.support.SPI;
+
+/**
+ * 外部适配器接口
+ *
+ * @author machengyuan 2018-8-18 下午10:14:02
+ * @version 1.0.0
+ */
+@SPI("logger")
+public interface OuterAdapter {
+
+ /**
+ * 外部适配器初始化接口
+ *
+ * @param configuration 外部适配器配置信息
+ */
+ void init(OuterAdapterConfig configuration);
+
+ /**
+ * 往适配器中同步数据
+ *
+ * @param dml 数据包
+ */
+ void sync(Dml dml);
+
+ /**
+ * 外部适配器销毁接口
+ */
+ void destroy();
+
+ /**
+ * Etl操作
+ *
+ * @param task 任务名, 对应配置名
+ * @param params etl筛选条件
+ */
+ default EtlResult etl(String task, List params) {
+ throw new UnsupportedOperationException("unsupported operation");
+ }
+
+ /**
+ * 计算总数
+ *
+ * @param task 任务名, 对应配置名
+ * @return 总数
+ */
+ default Map count(String task) {
+ throw new UnsupportedOperationException("unsupported operation");
+ }
+
+ /**
+ * 通过task获取对应的destination
+ *
+ * @param task 任务名, 对应配置名
+ * @return destination
+ */
+ default String getDestination(String task) {
+ return null;
+ }
+}
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/AdapterConfigs.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/AdapterConfigs.java
index 13e51af1..44d29ee9 100644
--- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/AdapterConfigs.java
+++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/AdapterConfigs.java
@@ -1,8 +1,28 @@
package com.alibaba.otter.canal.client.adapter.support;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
-public interface AdapterConfigs {
- Multimap configs = ArrayListMultimap.create();
+public class AdapterConfigs {
+
+ private static Map> configs = new ConcurrentHashMap<>();
+
+ public static void put(String key, String value) {
+ Set values = configs.get(key);
+ if (values == null) {
+ values = new LinkedHashSet<>();
+ }
+ values.add(value);
+ configs.put(key, values);
+ }
+
+ public static Set get(String key) {
+ return configs.get(key);
+ }
+
+ public static void clear() {
+ configs.clear();
+ }
}
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/CanalClientConfig.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/CanalClientConfig.java
index d885e1cb..08246a42 100644
--- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/CanalClientConfig.java
+++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/CanalClientConfig.java
@@ -62,6 +62,10 @@ public class CanalClientConfig {
return mqTopics;
}
+ public void setMqTopics(List mqTopics) {
+ this.mqTopics = mqTopics;
+ }
+
public Boolean getFlatMessage() {
return flatMessage;
}
@@ -70,10 +74,6 @@ public class CanalClientConfig {
this.flatMessage = flatMessage;
}
- public void setMqTopics(List mqTopics) {
- this.mqTopics = mqTopics;
- }
-
public List getCanalInstances() {
return canalInstances;
}
@@ -109,13 +109,13 @@ public class CanalClientConfig {
public static class AdapterGroup {
- private List outAdapters;
+ private List outAdapters;
- public List getOutAdapters() {
+ public List getOutAdapters() {
return outAdapters;
}
- public void setOutAdapters(List outAdapters) {
+ public void setOutAdapters(List outAdapters) {
this.outAdapters = outAdapters;
}
}
@@ -155,11 +155,11 @@ public class CanalClientConfig {
public static class Group {
- private String groupId;
+ private String groupId;
// private List adapters = new ArrayList<>();
- private List outAdapters;
+ private List outAdapters;
public String getGroupId() {
return groupId;
@@ -169,11 +169,11 @@ public class CanalClientConfig {
this.groupId = groupId;
}
- public List getOutAdapters() {
+ public List getOutAdapters() {
return outAdapters;
}
- public void setOutAdapters(List outAdapters) {
+ public void setOutAdapters(List outAdapters) {
this.outAdapters = outAdapters;
}
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/DatasourceConfig.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/DatasourceConfig.java
new file mode 100644
index 00000000..cf2ec471
--- /dev/null
+++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/DatasourceConfig.java
@@ -0,0 +1,75 @@
+package com.alibaba.otter.canal.client.adapter.support;
+
+import com.alibaba.druid.pool.DruidDataSource;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class DatasourceConfig {
+
+ public final static Map DATA_SOURCES = new ConcurrentHashMap<>();
+
+ private String driver = "com.mysql.jdbc.Driver";
+ private String url;
+ private String database;
+ private String type = "mysql";
+ private String username;
+ private String password;
+ private Integer maxActive = 3;
+
+ public String getDriver() {
+ return driver;
+ }
+
+ public void setDriver(String driver) {
+ this.driver = driver;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getDatabase() {
+ return database;
+ }
+
+ public void setDatabase(String database) {
+ this.database = database;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public Integer getMaxActive() {
+ return maxActive;
+ }
+
+ public void setMaxActive(Integer maxActive) {
+ this.maxActive = maxActive;
+ }
+}
diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/Dml.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/Dml.java
index d4cbbf7d..8e5af059 100644
--- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/Dml.java
+++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/Dml.java
@@ -14,6 +14,7 @@ public class Dml implements Serializable {
private static final long serialVersionUID = 2611556444074013268L;
+ private String destination;
private String database;
private String table;
private String type;
@@ -25,6 +26,14 @@ public class Dml implements Serializable {
private List