This is an automated email from the ASF dual-hosted git repository.
wqliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git
The following commit(s) were added to refs/heads/master by this push:
new 623146be6 [Feature] Add eventmesh-connector-sdks module
new b95bd8bcb Merge pull request #3976 from
xwm1992/add-eventmesh-connector-sdks
623146be6 is described below
commit 623146be62c1d85a87d97bf246a9a257dd94c004
Author: xwm1992 <[email protected]>
AuthorDate: Fri May 19 18:26:35 2023 +0800
[Feature] Add eventmesh-connector-sdks module
---
build.gradle | 1 +
eventmesh-connector-sdks/README.md | 0
.../build.gradle | 2 +-
.../eventmesh-connector-sdk-java}/build.gradle | 17 +++
.../gradle.properties | 0
.../apache/eventmesh/connector/Application.java | 103 +++++++++++++++
.../eventmesh/connector/ConnectorWorker.java | 7 +
.../org/apache/eventmesh/connector/SinkWorker.java | 145 ++++++++++++++++++++
.../apache/eventmesh/connector/SourceWorker.java | 146 +++++++++++++++++++++
.../eventmesh/connector/api/config/Config.java | 0
.../eventmesh/connector/api/config/Constants.java | 12 +-
.../connector/api/config/PubSubConfig.java | 22 +++-
.../eventmesh/connector/api/config/SinkConfig.java | 6 +
.../connector/api/config/SourceConfig.java | 6 +
.../connector/api/connector/Connector.java | 0
.../connector/api/connector/SinkConnector.java | 0
.../connector/api/connector/SourceConnector.java | 0
.../connector/api/data/ConnectRecord.java | 0
.../connector/api/data/DefaultKeyValue.java | 0
.../eventmesh/connector/api/data/KeyValue.java | 0
.../eventmesh/connector/api/data/RecordOffset.java | 0
.../connector/api/data/RecordPartition.java | 0
.../connector/api/data/RecordPosition.java | 0
.../apache/eventmesh/connector/api/sink/Sink.java | 0
.../eventmesh/connector/api/source/Source.java | 0
.../eventmesh/connector/util/ConfigUtil.java | 69 ++++++++++
.../gradle.properties | 0
settings.gradle | 3 +-
28 files changed, 535 insertions(+), 4 deletions(-)
diff --git a/build.gradle b/build.gradle
index f24508a1f..920c39072 100644
--- a/build.gradle
+++ b/build.gradle
@@ -449,6 +449,7 @@ subprojects {
dependency "com.fasterxml.jackson.core:jackson-databind:2.13.0"
dependency "com.fasterxml.jackson.core:jackson-core:2.13.0"
dependency "com.fasterxml.jackson.core:jackson-annotations:2.13.0"
+ dependency
"com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0"
dependency "org.asynchttpclient:async-http-client:2.12.0"
dependency "org.apache.httpcomponents:httpclient:4.5.13"
diff --git a/eventmesh-connector-sdks/README.md
b/eventmesh-connector-sdks/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/eventmesh-connectors/eventmesh-connector-api/build.gradle
b/eventmesh-connector-sdks/build.gradle
similarity index 99%
copy from eventmesh-connectors/eventmesh-connector-api/build.gradle
copy to eventmesh-connector-sdks/build.gradle
index 2944f9819..d973dceda 100644
--- a/eventmesh-connectors/eventmesh-connector-api/build.gradle
+++ b/eventmesh-connector-sdks/build.gradle
@@ -13,4 +13,4 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- */
+ */
\ No newline at end of file
diff --git a/eventmesh-connectors/eventmesh-connector-api/build.gradle
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/build.gradle
similarity index 55%
rename from eventmesh-connectors/eventmesh-connector-api/build.gradle
rename to eventmesh-connector-sdks/eventmesh-connector-sdk-java/build.gradle
index 2944f9819..a671db906 100644
--- a/eventmesh-connectors/eventmesh-connector-api/build.gradle
+++ b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/build.gradle
@@ -14,3 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+dependencies {
+ api "org.slf4j:slf4j-api"
+ implementation "org.apache.logging.log4j:log4j-api"
+ implementation "org.apache.logging.log4j:log4j-core"
+ implementation "org.apache.logging.log4j:log4j-slf4j-impl"
+
+ implementation "com.fasterxml.jackson.core:jackson-databind"
+ implementation "com.fasterxml.jackson.core:jackson-core"
+ implementation "com.fasterxml.jackson.core:jackson-annotations"
+ implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml"
+
+ implementation project(":eventmesh-sdk-java")
+
+ compileOnly 'org.projectlombok:lombok'
+ annotationProcessor 'org.projectlombok:lombok'
+}
\ No newline at end of file
diff --git a/eventmesh-connectors/eventmesh-connector-api/gradle.properties
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/gradle.properties
similarity index 100%
copy from eventmesh-connectors/eventmesh-connector-api/gradle.properties
copy to eventmesh-connector-sdks/eventmesh-connector-sdk-java/gradle.properties
diff --git
a/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/Application.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/Application.java
new file mode 100644
index 000000000..913bdd41f
--- /dev/null
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/Application.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.connector;
+
+import org.apache.eventmesh.connector.api.config.Config;
+import org.apache.eventmesh.connector.api.config.SinkConfig;
+import org.apache.eventmesh.connector.api.config.SourceConfig;
+import org.apache.eventmesh.connector.api.connector.Connector;
+import org.apache.eventmesh.connector.api.sink.Sink;
+import org.apache.eventmesh.connector.api.source.Source;
+import org.apache.eventmesh.connector.util.ConfigUtil;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class Application {
+
+ public static void run(Class<? extends Connector> clazz) throws Exception {
+ Connector connector;
+ try {
+ connector = clazz.getDeclaredConstructor().newInstance();
+ } catch (Exception e) {
+ log.error("new connector error", e);
+ return;
+ }
+ Config config;
+ try {
+ config = ConfigUtil.parse(connector.configClass());
+ // offset storage, memory default
+// KVStoreFactory.setStoreConfig(config.getStoreConfig());
+ } catch (Exception e) {
+ log.error("parse config error", e);
+ return;
+ }
+ try {
+ connector.init(config);
+ } catch (Exception e) {
+ log.error("connector {} initialize error", connector.name(), e);
+ return;
+ }
+
+ ConnectorWorker worker;
+ if (isSink(clazz)) {
+ worker = new SinkWorker((Sink) connector, (SinkConfig) config);
+ } else if (isSource(clazz)) {
+ worker = new SourceWorker((Source) connector, (SourceConfig)
config);
+ } else {
+ log.error("class {} is not sink and source", clazz);
+ return;
+ }
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ worker.stop();
+ log.info("connector {} stopped", connector.name());
+ }));
+ worker.start();
+ log.info("connector {} started", connector.name());
+ }
+
+ private static boolean isAssignableFrom(Class<?> c, Class<?> cls) {
+ Class<?>[] clazzArr = c.getInterfaces();
+ for (Class<?> clazz : clazzArr) {
+ if (clazz.isAssignableFrom(cls)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isSink(Class<?> c) {
+ while (c != null && c != Object.class) {
+ if (isAssignableFrom(c, Sink.class)) {
+ return true;
+ }
+ c = c.getSuperclass();
+ }
+ return false;
+ }
+
+ private static boolean isSource(Class<?> c) {
+ while (c != null && c != Object.class) {
+ if (isAssignableFrom(c, Source.class)) {
+ return true;
+ }
+ c = c.getSuperclass();
+ }
+ return false;
+ }
+}
diff --git
a/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/ConnectorWorker.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/ConnectorWorker.java
new file mode 100644
index 000000000..59440077b
--- /dev/null
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/ConnectorWorker.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.connector;
+
+public interface ConnectorWorker {
+ void start();
+
+ void stop();
+}
diff --git
a/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SinkWorker.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SinkWorker.java
new file mode 100644
index 000000000..3c22e6db2
--- /dev/null
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SinkWorker.java
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.connector;
+
+import org.apache.eventmesh.client.tcp.EventMeshTCPClient;
+import org.apache.eventmesh.client.tcp.EventMeshTCPClientFactory;
+import org.apache.eventmesh.client.tcp.common.MessageUtils;
+import org.apache.eventmesh.client.tcp.common.ReceiveMsgHook;
+import org.apache.eventmesh.client.tcp.conf.EventMeshTCPClientConfig;
+import org.apache.eventmesh.common.protocol.SubscriptionMode;
+import org.apache.eventmesh.common.protocol.SubscriptionType;
+import org.apache.eventmesh.common.protocol.tcp.UserAgent;
+import org.apache.eventmesh.common.utils.SystemUtils;
+import org.apache.eventmesh.connector.api.config.SinkConfig;
+import org.apache.eventmesh.connector.api.data.ConnectRecord;
+import org.apache.eventmesh.connector.api.sink.Sink;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import io.cloudevents.CloudEvent;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class SinkWorker implements ConnectorWorker {
+
+ private final Sink sink;
+ private final SinkConfig config;
+
+ private final EventMeshTCPClient<CloudEvent> eventMeshTCPClient;
+
+ public SinkWorker(Sink sink, SinkConfig config) throws Exception {
+ this.sink = sink;
+ this.config = config;
+ sink.init(config);
+ eventMeshTCPClient = buildEventMeshSubClient(config);
+ eventMeshTCPClient.init();
+ }
+
+ private EventMeshTCPClient<CloudEvent> buildEventMeshSubClient(SinkConfig
config) {
+ String meshAddress = config.getPubSubConfig().getMeshAddress();
+ String meshIp = meshAddress.split(":")[0];
+ int meshPort = Integer.parseInt(meshAddress.split(":")[1]);
+ UserAgent agent = UserAgent.builder()
+ .env(config.getPubSubConfig().getEnv())
+ .host("localhost")
+ .password(config.getPubSubConfig().getPassWord())
+ .username(config.getPubSubConfig().getUserName())
+ .group(config.getPubSubConfig().getGroup())
+ .path("/")
+ .port(8362)
+ .subsystem(config.getPubSubConfig().getSubsystem())
+ .pid(Integer.parseInt(SystemUtils.getProcessId()))
+ .version("2.0")
+ .idc(config.getPubSubConfig().getIdc())
+ .build();
+ UserAgent userAgent = MessageUtils.generateSubClient(agent);
+
+ EventMeshTCPClientConfig eventMeshTcpClientConfig =
EventMeshTCPClientConfig.builder()
+ .host(meshIp)
+ .port(meshPort)
+ .userAgent(userAgent)
+ .build();
+ return
EventMeshTCPClientFactory.createEventMeshTCPClient(eventMeshTcpClientConfig,
CloudEvent.class);
+ }
+
+ @Override
+ public void start() {
+ log.info("sink worker starting {}", sink.name());
+ log.info("event mesh address is {}",
config.getPubSubConfig().getMeshAddress());
+ try {
+ sink.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ }
+ eventMeshTCPClient.subscribe(config.getPubSubConfig().getMeshTopic(),
SubscriptionMode.CLUSTERING,
+ SubscriptionType.ASYNC);
+ eventMeshTCPClient.registerSubBusiHandler(new EventHandler(sink));
+ eventMeshTCPClient.listen();
+ }
+
+ @Override
+ public void stop() {
+ log.info("sink worker stopping");
+ try {
+ eventMeshTCPClient.unsubscribe();
+ eventMeshTCPClient.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("event mesh client close", e);
+ }
+ try {
+ sink.stop();
+ } catch (Exception e) {
+ log.error("sink destroy error", e);
+ }
+
+ log.info("source worker stopped");
+ }
+
+ static class EventHandler implements ReceiveMsgHook<CloudEvent> {
+ private final Sink sink;
+
+ public EventHandler(Sink sink) {
+ this.sink = sink;
+ }
+
+ @Override
+ public Optional<CloudEvent> handle(CloudEvent event) {
+ byte[] body = Objects.requireNonNull(event.getData()).toBytes();
+ //todo: recordPartition & recordOffset
+ ConnectRecord connectRecord = new ConnectRecord(null, null,
System.currentTimeMillis(), body);
+ for (String extensionName : event.getExtensionNames()) {
+ connectRecord.addExtension(extensionName,
Objects.requireNonNull(event.getExtension(extensionName)).toString());
+ }
+ connectRecord.addExtension("id", event.getId());
+ connectRecord.addExtension("topic", event.getSubject());
+ connectRecord.addExtension("source", event.getSource().toString());
+ connectRecord.addExtension("type", event.getType());
+ List<ConnectRecord> connectRecords = new ArrayList<>();
+ connectRecords.add(connectRecord);
+ sink.put(connectRecords);
+ return Optional.empty();
+ }
+ }
+}
diff --git
a/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SourceWorker.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SourceWorker.java
new file mode 100644
index 000000000..01fd26bfc
--- /dev/null
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/SourceWorker.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.connector;
+
+import org.apache.eventmesh.client.tcp.EventMeshTCPClient;
+import org.apache.eventmesh.client.tcp.EventMeshTCPClientFactory;
+import org.apache.eventmesh.client.tcp.common.EventMeshCommon;
+import org.apache.eventmesh.client.tcp.common.MessageUtils;
+import org.apache.eventmesh.client.tcp.conf.EventMeshTCPClientConfig;
+import org.apache.eventmesh.common.protocol.tcp.UserAgent;
+import org.apache.eventmesh.common.utils.JsonUtils;
+import org.apache.eventmesh.common.utils.SystemUtils;
+import org.apache.eventmesh.connector.api.config.SourceConfig;
+import org.apache.eventmesh.connector.api.data.ConnectRecord;
+import org.apache.eventmesh.connector.api.source.Source;
+
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+import io.cloudevents.CloudEvent;
+import io.cloudevents.core.builder.CloudEventBuilder;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class SourceWorker implements ConnectorWorker {
+
+ private final Source source;
+ private final SourceConfig config;
+
+ private final EventMeshTCPClient<CloudEvent> eventMeshTCPClient;
+
+ private volatile boolean isRunning = true;
+
+ public SourceWorker(Source source, SourceConfig config) throws Exception {
+ this.source = source;
+ this.config = config;
+ source.init(config);
+ eventMeshTCPClient = buildEventMeshPubClient(config);
+ eventMeshTCPClient.init();
+ }
+
+ private EventMeshTCPClient<CloudEvent>
buildEventMeshPubClient(SourceConfig config) {
+ String meshAddress = config.getPubSubConfig().getMeshAddress();
+ String meshIp = meshAddress.split(":")[0];
+ int meshPort = Integer.parseInt(meshAddress.split(":")[1]);
+ UserAgent agent = UserAgent.builder()
+ .env(config.getPubSubConfig().getEnv())
+ .host("localhost")
+ .password(config.getPubSubConfig().getPassWord())
+ .username(config.getPubSubConfig().getUserName())
+ .group(config.getPubSubConfig().getGroup())
+ .path("/")
+ .port(8362)
+ .subsystem(config.getPubSubConfig().getSubsystem())
+ .pid(Integer.parseInt(SystemUtils.getProcessId()))
+ .version("2.0")
+ .idc(config.getPubSubConfig().getIdc())
+ .build();
+ UserAgent userAgent = MessageUtils.generatePubClient(agent);
+
+ EventMeshTCPClientConfig eventMeshTcpClientConfig =
EventMeshTCPClientConfig.builder()
+ .host(meshIp)
+ .port(meshPort)
+ .userAgent(userAgent)
+ .build();
+ return
EventMeshTCPClientFactory.createEventMeshTCPClient(eventMeshTcpClientConfig,
CloudEvent.class);
+ }
+
+ @Override
+ public void start() {
+ log.info("source worker starting {}", source.name());
+ log.info("event mesh address is {}",
config.getPubSubConfig().getMeshAddress());
+ try {
+ source.start();
+ while (isRunning) {
+ List<ConnectRecord> connectorRecordList = source.poll();
+ for (ConnectRecord connectRecord : connectorRecordList) {
+ // todo: convert connectRecord to cloudevent
+ CloudEvent event = convertRecordToEvent(connectRecord);
+ eventMeshTCPClient.publish(event, 3000);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ }
+ log.info("source worker started");
+ }
+
+ private CloudEvent convertRecordToEvent(ConnectRecord connectRecord) {
+ final Map<String, String> content = new HashMap<>();
+ content.put("content", connectRecord.getData().toString());
+
+ return CloudEventBuilder.v1()
+ .withId(UUID.randomUUID().toString())
+ .withSubject(config.getPubSubConfig().getMeshTopic())
+ .withSource(URI.create("/"))
+ .withDataContentType("application/cloudevents+json")
+ .withType(EventMeshCommon.CLOUD_EVENTS_PROTOCOL_NAME)
+
.withData(Objects.requireNonNull(JsonUtils.toJSONString(content)).getBytes(StandardCharsets.UTF_8))
+ .withExtension("ttl", 10000)
+ .build();
+ }
+
+ @Override
+ public void stop() {
+ log.info("source worker stopping");
+ isRunning = false;
+ try {
+ source.stop();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("source destroy error", e);
+ }
+
+ try {
+ eventMeshTCPClient.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("event mesh client close", e);
+ }
+ log.info("source worker stopped");
+ }
+
+}
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/Config.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/Config.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/Config.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/Config.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/Constants.java
similarity index 73%
copy from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
copy to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/Constants.java
index 2b28c28f3..204a559c7 100644
---
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/Constants.java
@@ -17,5 +17,15 @@
package org.apache.eventmesh.connector.api.config;
-public abstract class SinkConfig extends Config {
+public class Constants {
+
+ public static final String ENV_TARGET = "connectorTarget";
+
+ public static final String ENV_PORT = "connectorPort";
+
+ public static final String ENV_CONFIG_FILE = "connectorConf";
+
+ public static final int DEFAULT_ATTEMPT = 3;
+
+ public static final int DEFAULT_PORT = 8080;
}
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/PubSubConfig.java
similarity index 75%
copy from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
copy to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/PubSubConfig.java
index 2b28c28f3..7423de203 100644
---
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/PubSubConfig.java
@@ -17,5 +17,25 @@
package org.apache.eventmesh.connector.api.config;
-public abstract class SinkConfig extends Config {
+import lombok.Data;
+
+@Data
+public class PubSubConfig {
+
+ private String meshAddress;
+
+ private String subject;
+
+ private String idc;
+
+ private String env;
+
+ private String group;
+
+ private String appId;
+
+ private String userName;
+
+ private String passWord;
+
}
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
similarity index 93%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
index 2b28c28f3..2a4621d7f 100644
---
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SinkConfig.java
@@ -17,5 +17,11 @@
package org.apache.eventmesh.connector.api.config;
+import lombok.Data;
+
+@Data
public abstract class SinkConfig extends Config {
+
+ private PubSubConfig pubSubConfig;
+
}
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
similarity index 93%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
index 3aa81f10e..9b74d5e36 100644
---
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/config/SourceConfig.java
@@ -17,5 +17,11 @@
package org.apache.eventmesh.connector.api.config;
+import lombok.Data;
+
+@Data
public abstract class SourceConfig extends Config {
+
+ private PubSubConfig pubSubConfig;
+
}
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/Connector.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/Connector.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/Connector.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/Connector.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/SinkConnector.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/SinkConnector.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/SinkConnector.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/SinkConnector.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/SourceConnector.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/SourceConnector.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/connector/SourceConnector.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/connector/SourceConnector.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/ConnectRecord.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/ConnectRecord.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/ConnectRecord.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/ConnectRecord.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/DefaultKeyValue.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/DefaultKeyValue.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/DefaultKeyValue.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/DefaultKeyValue.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/KeyValue.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/KeyValue.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/KeyValue.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/KeyValue.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordOffset.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordOffset.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordOffset.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordOffset.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordPartition.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordPartition.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordPartition.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordPartition.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordPosition.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordPosition.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/data/RecordPosition.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/data/RecordPosition.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/sink/Sink.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/sink/Sink.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/sink/Sink.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/sink/Sink.java
diff --git
a/eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/source/Source.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/source/Source.java
similarity index 100%
rename from
eventmesh-connectors/eventmesh-connector-api/src/main/java/org/apache/eventmesh/connector/api/source/Source.java
rename to
eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/api/source/Source.java
diff --git
a/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/util/ConfigUtil.java
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/util/ConfigUtil.java
new file mode 100644
index 000000000..bb1f53008
--- /dev/null
+++
b/eventmesh-connector-sdks/eventmesh-connector-sdk-java/src/main/java/org/apache/eventmesh/connector/util/ConfigUtil.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.connector.util;
+
+import org.apache.eventmesh.connector.api.config.Config;
+import org.apache.eventmesh.connector.api.config.Constants;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.URL;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class ConfigUtil {
+
+ public static Config parse(Class<? extends Config> c) throws Exception {
+ if (c == null) {
+ return null;
+ }
+ return parseConfig(c);
+ }
+
+ private static Config parseConfig(Class<? extends Config> c) throws
Exception {
+ String configFile = System.getProperty(Constants.ENV_CONFIG_FILE,
System.getenv(Constants.ENV_CONFIG_FILE));
+ if (configFile == null || configFile.isEmpty()) {
+ configFile = "config.yml";
+ }
+ return parse(c, configFile);
+ }
+
+ private static <T> T parse(Class<T> c, String filePathName) throws
Exception {
+ ObjectMapper objectMapper;
+ if (filePathName.endsWith("json")) {
+ objectMapper = new ObjectMapper();
+ } else {
+ objectMapper = new ObjectMapper(new YAMLFactory());
+ }
+
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
+ File file = new File(filePathName);
+ if (file.exists()) {
+ return objectMapper.readValue(file, c);
+ }
+ URL url = ConfigUtil.class.getClassLoader().getResource(filePathName);
+ if (url == null) {
+ throw new FileNotFoundException(filePathName);
+ }
+ return objectMapper.readValue(url, c);
+ }
+}
diff --git a/eventmesh-connectors/eventmesh-connector-api/gradle.properties
b/eventmesh-connector-sdks/gradle.properties
similarity index 100%
rename from eventmesh-connectors/eventmesh-connector-api/gradle.properties
rename to eventmesh-connector-sdks/gradle.properties
diff --git a/settings.gradle b/settings.gradle
index e1e742ee3..866656e05 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -23,7 +23,8 @@ include 'eventmesh-common'
include 'eventmesh-starter'
include 'eventmesh-examples'
include 'eventmesh-spi'
-include 'eventmesh-connectors:eventmesh-connector-api'
+include 'eventmesh-connector-sdks:eventmesh-connector-sdk-java'
+//include 'eventmesh-connectors:eventmesh-connector-sdk-java'
include 'eventmesh-connectors:source-connector-rocketmq'
include 'eventmesh-connectors:sink-connector-rocketmq'
include 'eventmesh-storage-plugin:eventmesh-storage-api'
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]