This is an automated email from the ASF dual-hosted git repository.

chenguangsheng 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 1e59cdf5c [ISSUE #4369]  Move Pravega plugin into Connector from 
Storage plugin moudle (#4408)
1e59cdf5c is described below

commit 1e59cdf5c1c3bd7ed97297c942e4ce90f6bffafe
Author: Fabian Bao <[email protected]>
AuthorDate: Mon Aug 28 19:09:25 2023 +0800

    [ISSUE #4369]  Move Pravega plugin into Connector from Storage plugin 
moudle (#4408)
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
    
    * feat: fix redis admin spi.
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
    
    * feat: refactor with pravega plugin.
---
 .../eventmesh-connector-pravega/build.gradle       |  33 ++++
 .../eventmesh-connector-pravega/gradle.properties  |  20 ++
 .../pravega/client/PravegaCloudEventWriter.java    |  73 +++++++
 .../connector/pravega/client/PravegaEvent.java     |  66 +++++++
 .../pravega/config/PravegaServerConfig.java        |  32 +++
 .../exception/PravegaConnectorException.java       |  29 +++
 .../pravega/server/PravegaConnectServer.java       |  46 +++++
 .../pravega/sink/config/PravegaSinkConfig.java     |  31 +++
 .../pravega/sink/config/SinkConnectorConfig.java   |  46 +++++
 .../sink/connector/PravegaSinkConnector.java       | 158 +++++++++++++++
 .../pravega/source/config/PravegaSourceConfig.java |  31 +++
 .../source/config/SourceConnectorConfig.java       |  47 +++++
 .../source/connector/PravegaSourceConnector.java   | 215 +++++++++++++++++++++
 .../src/main/resources/server-config.yml           |  19 ++
 .../src/main/resources/sink-config.yml             |  37 ++++
 .../src/main/resources/source-config.yml           |  46 +++++
 .../source/connector/RabbitMQSourceConnector.java  |   4 +-
 settings.gradle                                    |  24 ++-
 18 files changed, 945 insertions(+), 12 deletions(-)

diff --git a/eventmesh-connectors/eventmesh-connector-pravega/build.gradle 
b/eventmesh-connectors/eventmesh-connector-pravega/build.gradle
new file mode 100644
index 000000000..036533431
--- /dev/null
+++ b/eventmesh-connectors/eventmesh-connector-pravega/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+configurations {
+    implementation.exclude group: 'ch.qos.logback', module: 'logback-classic'
+    implementation.exclude group: 'log4j', module: 'log4j'
+}
+
+dependencies {
+    api project(":eventmesh-openconnect:eventmesh-openconnect-java")
+    implementation project(":eventmesh-common")
+
+    implementation("io.pravega:pravega-client:$pravega_version")
+
+    implementation 'io.cloudevents:cloudevents-json-jackson'
+
+    compileOnly 'org.projectlombok:lombok'
+    annotationProcessor 'org.projectlombok:lombok'
+}
diff --git a/eventmesh-connectors/eventmesh-connector-pravega/gradle.properties 
b/eventmesh-connectors/eventmesh-connector-pravega/gradle.properties
new file mode 100644
index 000000000..a5ea881f6
--- /dev/null
+++ b/eventmesh-connectors/eventmesh-connector-pravega/gradle.properties
@@ -0,0 +1,20 @@
+# 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.
+#
+
+pravega_version=0.11.0
+
+pluginType=connector
+pluginName=pravega
\ No newline at end of file
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaCloudEventWriter.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaCloudEventWriter.java
new file mode 100644
index 000000000..e8f6e5cba
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaCloudEventWriter.java
@@ -0,0 +1,73 @@
+/*
+ * 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.pravega.client;
+
+import java.nio.charset.StandardCharsets;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import io.cloudevents.CloudEventData;
+import io.cloudevents.SpecVersion;
+import io.cloudevents.core.format.EventFormat;
+import io.cloudevents.core.message.MessageWriter;
+import io.cloudevents.rw.CloudEventContextWriter;
+import io.cloudevents.rw.CloudEventRWException;
+import io.cloudevents.rw.CloudEventWriter;
+
+public class PravegaCloudEventWriter
+    implements MessageWriter<CloudEventWriter<PravegaEvent>, PravegaEvent>, 
CloudEventWriter<PravegaEvent> {
+
+    private final PravegaEvent pravegaEvent;
+
+    public PravegaCloudEventWriter(String topic) {
+        pravegaEvent = new PravegaEvent();
+        pravegaEvent.setTopic(topic);
+        pravegaEvent.setCreateTimestamp(System.currentTimeMillis());
+    }
+
+    @Override
+    public PravegaEvent setEvent(@Nullable EventFormat format, @Nonnull byte[] 
value) throws CloudEventRWException {
+        pravegaEvent.setData(new String(value, StandardCharsets.UTF_8));
+        return pravegaEvent;
+    }
+
+    @Override
+    public PravegaEvent end(CloudEventData data) throws CloudEventRWException {
+        pravegaEvent.setData(new String(data.toBytes(), 
StandardCharsets.UTF_8));
+        return pravegaEvent;
+    }
+
+    @Override
+    public PravegaEvent end() throws CloudEventRWException {
+        pravegaEvent.setData("");
+        return pravegaEvent;
+    }
+
+    @Override
+    public CloudEventContextWriter withContextAttribute(@Nonnull String name, 
@Nonnull String value) throws CloudEventRWException {
+        pravegaEvent.getExtensions().put(name, value);
+        return this;
+    }
+
+    @Override
+    public CloudEventWriter<PravegaEvent> create(SpecVersion version) throws 
CloudEventRWException {
+        pravegaEvent.setVersion(version);
+        return this;
+    }
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaEvent.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaEvent.java
new file mode 100644
index 000000000..ce06e482e
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/client/PravegaEvent.java
@@ -0,0 +1,66 @@
+/*
+ * 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.pravega.client;
+
+import org.apache.eventmesh.common.utils.JsonUtils;
+
+import java.io.Serializable;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+import io.cloudevents.CloudEvent;
+import io.cloudevents.SpecVersion;
+import io.cloudevents.core.builder.CloudEventBuilder;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class PravegaEvent implements Serializable {
+
+    private static final long serialVersionUID = 0L;
+
+    private SpecVersion version;
+    private String topic;
+    private String data;
+    private Map<String, String> extensions = new HashMap<>();
+    private long createTimestamp;
+
+    public static byte[] toByteArray(PravegaEvent pravegaEvent) {
+        return 
JsonUtils.toJSONString(pravegaEvent).getBytes(StandardCharsets.UTF_8);
+    }
+
+    public static PravegaEvent getFromByteArray(byte[] body) {
+        return JsonUtils.parseObject(new String(body, StandardCharsets.UTF_8), 
PravegaEvent.class);
+    }
+
+    public CloudEvent convertToCloudEvent() {
+        CloudEventBuilder builder = CloudEventBuilder.fromSpecVersion(version);
+        builder.withData(data.getBytes(StandardCharsets.UTF_8))
+            .withId(extensions.remove("id"))
+            .withSource(URI.create(extensions.remove("source")))
+            .withType(extensions.remove("type"))
+            .withDataContentType(extensions.remove("datacontenttype"))
+            .withSubject(extensions.remove("subject"));
+        extensions.forEach(builder::withExtension);
+        return builder.build();
+    }
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/config/PravegaServerConfig.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/config/PravegaServerConfig.java
new file mode 100644
index 000000000..bf5d9a4fb
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/config/PravegaServerConfig.java
@@ -0,0 +1,32 @@
+/*
+ * 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.pravega.config;
+
+import org.apache.eventmesh.openconnect.api.config.Config;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PravegaServerConfig extends Config {
+
+    private boolean sourceEnable;
+
+    private boolean sinkEnable;
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/exception/PravegaConnectorException.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/exception/PravegaConnectorException.java
new file mode 100644
index 000000000..5a94f3a87
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/exception/PravegaConnectorException.java
@@ -0,0 +1,29 @@
+/*
+ * 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.pravega.exception;
+
+public class PravegaConnectorException extends Exception {
+
+    public PravegaConnectorException(String message) {
+        super(message);
+    }
+
+    public PravegaConnectorException(Throwable throwable) {
+        super(throwable);
+    }
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/server/PravegaConnectServer.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/server/PravegaConnectServer.java
new file mode 100644
index 000000000..750139616
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/server/PravegaConnectServer.java
@@ -0,0 +1,46 @@
+/*
+ * 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.pravega.server;
+
+import org.apache.eventmesh.connector.pravega.config.PravegaServerConfig;
+import 
org.apache.eventmesh.connector.pravega.sink.connector.PravegaSinkConnector;
+import 
org.apache.eventmesh.connector.pravega.source.connector.PravegaSourceConnector;
+import org.apache.eventmesh.openconnect.Application;
+import org.apache.eventmesh.openconnect.util.ConfigUtil;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class PravegaConnectServer {
+
+    public static void main(String[] args) throws Exception {
+
+        PravegaServerConfig serverConfig = 
ConfigUtil.parse(PravegaServerConfig.class, "server-config.yml");
+
+        if (serverConfig.isSourceEnable()) {
+            Application pravegaSourceApp = new Application();
+            pravegaSourceApp.run(PravegaSourceConnector.class);
+        }
+
+        if (serverConfig.isSinkEnable()) {
+            Application pravegaSinkApp = new Application();
+            pravegaSinkApp.run(PravegaSinkConnector.class);
+        }
+
+    }
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/PravegaSinkConfig.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/PravegaSinkConfig.java
new file mode 100644
index 000000000..739c6539b
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/PravegaSinkConfig.java
@@ -0,0 +1,31 @@
+/*
+ * 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.pravega.sink.config;
+
+import org.apache.eventmesh.openconnect.api.config.SinkConfig;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PravegaSinkConfig extends SinkConfig {
+
+    public SinkConnectorConfig connectorConfig;
+
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/SinkConnectorConfig.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/SinkConnectorConfig.java
new file mode 100644
index 000000000..c254dee3b
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/config/SinkConnectorConfig.java
@@ -0,0 +1,46 @@
+/*
+ * 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.pravega.sink.config;
+
+import java.net.URI;
+
+import lombok.Data;
+
+@Data
+public class SinkConnectorConfig {
+
+    private String connectorName;
+
+    private URI controllerURI;
+
+    private String scope;
+
+    private int clientPoolSize;
+
+    private int queueSize;
+
+    private boolean authEnabled;
+
+    private String username;
+
+    private String password;
+
+    private boolean tlsEnable;
+
+    private String truststore;
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/connector/PravegaSinkConnector.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/connector/PravegaSinkConnector.java
new file mode 100644
index 000000000..7ad7cd19f
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/sink/connector/PravegaSinkConnector.java
@@ -0,0 +1,158 @@
+/*
+ * 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.pravega.sink.connector;
+
+import org.apache.eventmesh.connector.pravega.client.PravegaCloudEventWriter;
+import org.apache.eventmesh.connector.pravega.client.PravegaEvent;
+import 
org.apache.eventmesh.connector.pravega.exception.PravegaConnectorException;
+import org.apache.eventmesh.connector.pravega.sink.config.PravegaSinkConfig;
+import org.apache.eventmesh.openconnect.api.config.Config;
+import org.apache.eventmesh.openconnect.api.connector.ConnectorContext;
+import org.apache.eventmesh.openconnect.api.connector.SinkConnectorContext;
+import org.apache.eventmesh.openconnect.api.sink.Sink;
+import org.apache.eventmesh.openconnect.offsetmgmt.api.data.ConnectRecord;
+import org.apache.eventmesh.openconnect.util.CloudEventUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import io.cloudevents.CloudEvent;
+import io.pravega.client.ClientConfig;
+import io.pravega.client.EventStreamClientFactory;
+import io.pravega.client.admin.StreamManager;
+import io.pravega.client.stream.EventStreamWriter;
+import io.pravega.client.stream.EventWriterConfig;
+import io.pravega.client.stream.StreamConfiguration;
+import io.pravega.client.stream.impl.ByteArraySerializer;
+import io.pravega.shared.security.auth.DefaultCredentials;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class PravegaSinkConnector implements Sink {
+
+    private PravegaSinkConfig sinkConfig;
+    private StreamManager streamManager;
+    private EventStreamClientFactory clientFactory;
+    private final Map<String, EventStreamWriter<byte[]>> writerMap = new 
ConcurrentHashMap<>();
+
+    private static final AtomicBoolean started = new AtomicBoolean(false);
+
+    @Override
+    public Class<? extends Config> configClass() {
+        return PravegaSinkConfig.class;
+    }
+
+    @Override
+    public void init(Config config) throws Exception {
+    }
+
+    @Override
+    public void init(ConnectorContext connectorContext) throws Exception {
+        SinkConnectorContext sinkConnectorContext = (SinkConnectorContext) 
connectorContext;
+        this.sinkConfig = (PravegaSinkConfig) 
sinkConnectorContext.getSinkConfig();
+
+        streamManager = 
StreamManager.create(sinkConfig.getConnectorConfig().getControllerURI());
+
+        if 
(!streamManager.checkScopeExists(sinkConfig.getConnectorConfig().getScope())) {
+            
streamManager.createScope(sinkConfig.getConnectorConfig().getScope());
+            log.debug("scope[{}] is just created.", 
sinkConfig.getConnectorConfig().getScope());
+        }
+
+        ClientConfig.ClientConfigBuilder clientConfigBuilder =
+                
ClientConfig.builder().controllerURI(sinkConfig.getConnectorConfig().getControllerURI());
+        if (sinkConfig.getConnectorConfig().isAuthEnabled()) {
+            clientConfigBuilder.credentials(
+                    new DefaultCredentials(
+                            sinkConfig.getConnectorConfig().getPassword(),
+                            sinkConfig.getConnectorConfig().getUsername()));
+        }
+        if (sinkConfig.getConnectorConfig().isTlsEnable()) {
+            
clientConfigBuilder.trustStore(sinkConfig.getConnectorConfig().getTruststore()).validateHostName(false);
+        }
+        ClientConfig clientConfig = clientConfigBuilder.build();
+        clientFactory = 
EventStreamClientFactory.withScope(sinkConfig.getConnectorConfig().getScope(), 
clientConfig);
+    }
+
+    @Override
+    public void start() throws Exception {
+        started.compareAndSet(false, true);
+    }
+
+    @Override
+    public void commit(ConnectRecord record) {
+
+    }
+
+    @Override
+    public String name() {
+        return this.sinkConfig.getConnectorConfig().getConnectorName();
+    }
+
+    @Override
+    public void stop() {
+        writerMap.forEach((topic, writer) -> writer.close());
+        writerMap.clear();
+        clientFactory.close();
+        streamManager.close();
+        started.compareAndSet(true, false);
+    }
+
+    @Override
+    public void put(List<ConnectRecord> sinkRecords) {
+        for (ConnectRecord connectRecord : sinkRecords) {
+            CloudEvent cloudEvent = 
CloudEventUtil.convertRecordToEvent(connectRecord);
+            try {
+                publish(cloudEvent.getSubject(), cloudEvent);
+            } catch (InterruptedException e) {
+                Thread currentThread = Thread.currentThread();
+                log.warn("[PravegaSinkConnector] Interrupting thread {} due to 
exception {}", currentThread.getName(), e.getMessage());
+                currentThread.interrupt();
+            } catch (Exception e) {
+                log.error("[PravegaSinkConnector] sendResult has error : ", e);
+            }
+        }
+    }
+
+    private void publish(String topic, CloudEvent cloudEvent) throws Exception 
{
+        if (!createStream(topic)) {
+            log.debug("stream[{}] has already been created.", topic);
+        }
+
+        try (EventStreamWriter<byte[]> writer = 
writerMap.computeIfAbsent(topic, k ->
+                clientFactory.createEventWriter(topic, new 
ByteArraySerializer(), EventWriterConfig.builder().build()))) {
+            PravegaCloudEventWriter cloudEventWriter = new 
PravegaCloudEventWriter(topic);
+            PravegaEvent pravegaEvent = 
cloudEventWriter.writeBinary(cloudEvent);
+            writer.writeEvent(PravegaEvent.toByteArray(pravegaEvent)).get(5, 
TimeUnit.SECONDS);
+        } catch (ExecutionException | InterruptedException | TimeoutException 
e) {
+            log.error(String.format("Write topic[%s] fail.", topic), e);
+            throw new PravegaConnectorException(String.format("Write topic[%s] 
fail.", topic));
+        }
+    }
+
+    private boolean createStream(String topic) {
+        StreamConfiguration streamConfiguration = 
StreamConfiguration.builder().build();
+        return 
streamManager.createStream(sinkConfig.getConnectorConfig().getScope(), topic, 
streamConfiguration);
+    }
+
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/PravegaSourceConfig.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/PravegaSourceConfig.java
new file mode 100644
index 000000000..87fbd3d57
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/PravegaSourceConfig.java
@@ -0,0 +1,31 @@
+/*
+ * 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.pravega.source.config;
+
+import org.apache.eventmesh.openconnect.api.config.SourceConfig;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PravegaSourceConfig extends SourceConfig {
+
+    public SourceConnectorConfig connectorConfig;
+
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/SourceConnectorConfig.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/SourceConnectorConfig.java
new file mode 100644
index 000000000..1ff54d1c1
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/config/SourceConnectorConfig.java
@@ -0,0 +1,47 @@
+/*
+ * 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.pravega.source.config;
+
+import java.net.URI;
+
+import lombok.Data;
+
+@Data
+public class SourceConnectorConfig {
+
+    private String connectorName;
+
+    private URI controllerURI;
+
+    private String scope;
+
+    private int clientPoolSize;
+
+    private int queueSize;
+
+    private boolean authEnabled;
+
+    private String username;
+
+    private String password;
+
+    private boolean tlsEnable;
+
+    private String truststore;
+
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/connector/PravegaSourceConnector.java
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/connector/PravegaSourceConnector.java
new file mode 100644
index 000000000..b0f872854
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/java/org/apache/eventmesh/connector/pravega/source/connector/PravegaSourceConnector.java
@@ -0,0 +1,215 @@
+/*
+ * 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.pravega.source.connector;
+
+import org.apache.eventmesh.common.ThreadPoolFactory;
+import org.apache.eventmesh.connector.pravega.client.PravegaEvent;
+import 
org.apache.eventmesh.connector.pravega.source.config.PravegaSourceConfig;
+import org.apache.eventmesh.openconnect.api.config.Config;
+import org.apache.eventmesh.openconnect.api.connector.ConnectorContext;
+import org.apache.eventmesh.openconnect.api.connector.SourceConnectorContext;
+import org.apache.eventmesh.openconnect.api.source.Source;
+import org.apache.eventmesh.openconnect.offsetmgmt.api.data.ConnectRecord;
+import org.apache.eventmesh.openconnect.util.CloudEventUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import io.cloudevents.CloudEvent;
+import io.pravega.client.ClientConfig;
+import io.pravega.client.EventStreamClientFactory;
+import io.pravega.client.admin.ReaderGroupManager;
+import io.pravega.client.admin.StreamManager;
+import io.pravega.client.stream.EventRead;
+import io.pravega.client.stream.EventStreamReader;
+import io.pravega.client.stream.ReaderConfig;
+import io.pravega.client.stream.ReaderGroupConfig;
+import io.pravega.client.stream.impl.ByteArraySerializer;
+import io.pravega.shared.NameUtils;
+import io.pravega.shared.security.auth.DefaultCredentials;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class PravegaSourceConnector implements Source {
+
+    private static final AtomicBoolean started = new AtomicBoolean(false);
+
+    private static final int DEFAULT_BATCH_SIZE = 10;
+
+    private PravegaSourceConfig sourceConfig;
+
+    private StreamManager streamManager;
+
+    private EventStreamClientFactory clientFactory;
+
+    private ReaderGroupManager readerGroupManager;
+
+    private final Map<String, PravegaSourceHandler> sourceHandlerMap = new 
ConcurrentHashMap<>();
+
+    private BlockingQueue<CloudEvent> queue;
+
+    private final ThreadPoolExecutor executor = 
ThreadPoolFactory.createThreadPoolExecutor(
+            Runtime.getRuntime().availableProcessors() * 2,
+            Runtime.getRuntime().availableProcessors() * 2,
+            "EventMesh-RabbitMQSourceConnector-");
+
+    @Override
+    public Class<? extends Config> configClass() {
+        return PravegaSourceConfig.class;
+    }
+
+    @Override
+    public void init(Config config) throws Exception {
+    }
+
+    @Override
+    public void init(ConnectorContext connectorContext) throws Exception {
+        SourceConnectorContext sourceConnectorContext = 
(SourceConnectorContext) connectorContext;
+        this.sourceConfig = (PravegaSourceConfig) 
sourceConnectorContext.getSourceConfig();
+        this.queue = new LinkedBlockingQueue<>(1000);
+
+        streamManager = 
StreamManager.create(sourceConfig.getConnectorConfig().getControllerURI());
+        ClientConfig.ClientConfigBuilder clientConfigBuilder =
+                
ClientConfig.builder().controllerURI(sourceConfig.getConnectorConfig().getControllerURI());
+        if (sourceConfig.getConnectorConfig().isAuthEnabled()) {
+            clientConfigBuilder.credentials(
+                    new DefaultCredentials(
+                            sourceConfig.getConnectorConfig().getPassword(),
+                            sourceConfig.getConnectorConfig().getUsername()));
+        }
+        if (sourceConfig.getConnectorConfig().isTlsEnable()) {
+            
clientConfigBuilder.trustStore(sourceConfig.getConnectorConfig().getTruststore()).validateHostName(false);
+        }
+        ClientConfig clientConfig = clientConfigBuilder.build();
+        clientFactory = 
EventStreamClientFactory.withScope(sourceConfig.getConnectorConfig().getScope(),
 clientConfig);
+        readerGroupManager = 
ReaderGroupManager.withScope(sourceConfig.getConnectorConfig().getScope(), 
clientConfig);
+
+        initReaders();
+    }
+
+    private void initReaders() {
+        streamManager.listStreams(sourceConfig.getConnectorConfig().getScope())
+                .forEachRemaining(stream -> {
+                    if (stream.getStreamName().startsWith("_")) {
+                        return;
+                    }
+                    ReaderGroupConfig readerGroupConfig =
+                            ReaderGroupConfig.builder()
+                                    
.stream(NameUtils.getScopedStreamName(sourceConfig.getConnectorConfig().getScope(),
 stream.getStreamName()))
+                                    
.retentionType(ReaderGroupConfig.StreamDataRetention.AUTOMATIC_RELEASE_AT_LAST_CHECKPOINT)
+                                    .build();
+                    
readerGroupManager.createReaderGroup(stream.getStreamName(), readerGroupConfig);
+
+                    EventStreamReader<byte[]> reader = 
clientFactory.createReader(
+                            "PravegaSourceConnector-reader",
+                            stream.getStreamName(),
+                            new ByteArraySerializer(),
+                            ReaderConfig.builder().build());
+                    this.sourceHandlerMap.put(stream.getStreamName(), new 
PravegaSourceHandler(reader));
+                });
+
+    }
+
+    @Override
+    public void start() throws Exception {
+        sourceHandlerMap.forEach((topic, handler) -> 
executor.execute(handler));
+        started.compareAndSet(false, true);
+    }
+
+    @Override
+    public void commit(ConnectRecord record) {
+    }
+
+    @Override
+    public String name() {
+        return this.sourceConfig.getConnectorConfig().getConnectorName();
+    }
+
+    @Override
+    public void stop() {
+        sourceHandlerMap.forEach((topic, handler) -> {
+            readerGroupManager.deleteReaderGroup(topic);
+            handler.stop();
+        });
+        sourceHandlerMap.clear();
+        readerGroupManager.close();
+        clientFactory.close();
+        streamManager.close();
+        started.compareAndSet(true, false);
+    }
+
+    @Override
+    public List<ConnectRecord> poll() {
+        List<ConnectRecord> connectRecords = new 
ArrayList<>(DEFAULT_BATCH_SIZE);
+        for (int count = 0; count < DEFAULT_BATCH_SIZE; ++count) {
+            try {
+                CloudEvent event = queue.poll(3, TimeUnit.SECONDS);
+                if (event == null) {
+                    break;
+                }
+
+                connectRecords.add(CloudEventUtil.convertEventToRecord(event));
+            } catch (InterruptedException e) {
+                break;
+            }
+        }
+        return connectRecords;
+    }
+
+    public class PravegaSourceHandler implements Runnable {
+
+        private final EventStreamReader<byte[]> reader;
+
+        private final AtomicBoolean running = new AtomicBoolean(true);
+
+        public PravegaSourceHandler(EventStreamReader<byte[]> reader) {
+            this.reader = reader;
+        }
+
+        @Override
+        public void run() {
+            while (running.get()) {
+                try {
+                    EventRead<byte[]> event = reader.readNextEvent(2000);
+
+                    byte[] eventByteArray = event.getEvent();
+                    if (eventByteArray == null) {
+                        continue;
+                    }
+                    PravegaEvent pravegaEvent = 
PravegaEvent.getFromByteArray(eventByteArray);
+                    CloudEvent cloudEvent = pravegaEvent.convertToCloudEvent();
+                    queue.add(cloudEvent);
+                } catch (Exception ex) {
+                    log.error("[PravegaSourceHandler] thread run happen 
exception.", ex);
+                }
+            }
+        }
+
+        public void stop() {
+            running.compareAndSet(true, false);
+        }
+    }
+}
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/server-config.yml
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/server-config.yml
new file mode 100644
index 000000000..5f66dd0f6
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/server-config.yml
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+
+sourceEnable: true
+sinkEnable: true
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/sink-config.yml
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/sink-config.yml
new file mode 100644
index 000000000..99bad3386
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/sink-config.yml
@@ -0,0 +1,37 @@
+#
+# 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.
+#
+
+pubSubConfig:
+    meshAddress: 127.0.0.1:10000
+    subject: TopicTest
+    idc: FT
+    env: PRD
+    group: pravegaSink
+    appId: 5031
+    userName: pravegaSinkUser
+    passWord: pravegaPassWord
+connectorConfig:
+    connectorName: pravegaSink
+    controllerURI: tcp://127.0.0.1:9090
+    scope: eventmesh-pravega
+    authEnabled: false
+    username:
+    password:
+    tlsEnabled: false
+    truststore:
+    clientPoolSize: 8
+    queueSize: 512
diff --git 
a/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/source-config.yml
 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/source-config.yml
new file mode 100644
index 000000000..fe9fb81dc
--- /dev/null
+++ 
b/eventmesh-connectors/eventmesh-connector-pravega/src/main/resources/source-config.yml
@@ -0,0 +1,46 @@
+#
+# 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.
+#
+
+pubSubConfig:
+    meshAddress: 127.0.0.1:10000
+    subject: TopicTest
+    idc: FT
+    env: PRD
+    group: pravegaSource
+    appId: 5032
+    userName: pravegaSourceUser
+    passWord: pravegaPassWord
+connectorConfig:
+    connectorName: pravegaSource
+    controllerURI: tcp://127.0.0.1:9090
+    scope: eventmesh-pravega
+    authEnabled: false
+    username: 
+    password: 
+    tlsEnabled: false
+    truststore: 
+    clientPoolSize: 8
+    queueSize: 512
+offsetStorageConfig:
+    offsetStorageType: nacos
+    offsetStorageAddr: 127.0.0.1:8848
+    extensions: {
+                    #same with connectorName
+                    dataId: pravegaSource,
+                    #same with group
+                    group: pravegaSource
+    }
diff --git 
a/eventmesh-connectors/eventmesh-connector-rabbitmq/src/main/java/org/apache/eventmesh/connector/rabbitmq/source/connector/RabbitMQSourceConnector.java
 
b/eventmesh-connectors/eventmesh-connector-rabbitmq/src/main/java/org/apache/eventmesh/connector/rabbitmq/source/connector/RabbitMQSourceConnector.java
index 720003641..24cac9bfa 100644
--- 
a/eventmesh-connectors/eventmesh-connector-rabbitmq/src/main/java/org/apache/eventmesh/connector/rabbitmq/source/connector/RabbitMQSourceConnector.java
+++ 
b/eventmesh-connectors/eventmesh-connector-rabbitmq/src/main/java/org/apache/eventmesh/connector/rabbitmq/source/connector/RabbitMQSourceConnector.java
@@ -176,13 +176,13 @@ public class RabbitMQSourceConnector implements Source {
                         }
                     }
                 } catch (Exception ex) {
-                    log.error("[RabbitMQSinkHandler] thread run happen 
exception.", ex);
+                    log.error("[RabbitMQSourceHandler] thread run happen 
exception.", ex);
                 }
             }
         }
 
         public void stop() {
-            stop.set(true);
+            stop.compareAndSet(false, true);
         }
     }
 }
diff --git a/settings.gradle b/settings.gradle
index 5b7c0ea8c..4df089780 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -23,10 +23,11 @@ include 'eventmesh-common'
 include 'eventmesh-starter'
 include 'eventmesh-examples'
 include 'eventmesh-spi'
+
 include 'eventmesh-openconnect:eventmesh-openconnect-java'
 include 
'eventmesh-openconnect:eventmesh-openconnect-offsetmgmt-plugin:eventmesh-openconnect-offsetmgmt-api'
 include 
'eventmesh-openconnect:eventmesh-openconnect-offsetmgmt-plugin:eventmesh-openconnect-offsetmgmt-nacos'
-include 'eventmesh-openconnect:eventmesh-openconnect-java'
+
 include 'eventmesh-connectors:eventmesh-connector-rocketmq'
 include 'eventmesh-connectors:eventmesh-connector-rabbitmq'
 include 'eventmesh-connectors:eventmesh-connector-redis'
@@ -34,6 +35,9 @@ include 'eventmesh-connectors:eventmesh-connector-mongodb'
 include 'eventmesh-connectors:eventmesh-connector-openfunction'
 include 'eventmesh-connectors:eventmesh-connector-pulsar'
 include 'eventmesh-connectors:eventmesh-connector-kafka'
+include 'eventmesh-connectors:eventmesh-connector-s3'
+include 'eventmesh-connectors:eventmesh-connector-pravega'
+
 include 'eventmesh-storage-plugin:eventmesh-storage-api'
 include 'eventmesh-storage-plugin:eventmesh-storage-standalone'
 include 'eventmesh-storage-plugin:eventmesh-storage-kafka'
@@ -44,14 +48,22 @@ include 'eventmesh-storage-plugin:eventmesh-storage-pravega'
 include 'eventmesh-storage-plugin:eventmesh-storage-redis'
 include 'eventmesh-storage-plugin:eventmesh-storage-rocketmq'
 include 'eventmesh-storage-plugin:eventmesh-storage-rabbitmq'
+
+include 'eventmesh-security-plugin'
 include 'eventmesh-security-plugin:eventmesh-security-api'
 include 'eventmesh-security-plugin:eventmesh-security-acl'
+include 'eventmesh-security-plugin:eventmesh-security-auth-http-basic'
+include 'eventmesh-security-plugin:eventmesh-security-auth-token'
+
 include 'eventmesh-registry-plugin:eventmesh-registry-api'
 include 'eventmesh-registry-plugin:eventmesh-registry-nacos'
 include 'eventmesh-registry-plugin:eventmesh-registry-etcd'
 include 'eventmesh-registry-plugin:eventmesh-registry-consul'
 include 'eventmesh-registry-plugin:eventmesh-registry-zookeeper'
+
 include 'eventmesh-admin'
+include 'eventmesh-admin:eventmesh-admin-rocketmq'
+
 include 'eventmesh-protocol-plugin'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-api'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-openmessage'
@@ -59,28 +71,20 @@ include 
'eventmesh-protocol-plugin:eventmesh-protocol-cloudevents'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-meshmessage'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-http'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-webhook'
-include 'eventmesh-admin:eventmesh-admin-rocketmq'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-grpc'
 include 'eventmesh-protocol-plugin:eventmesh-protocol-grpcmessage'
+
 include 'eventmesh-metrics-plugin'
 include 'eventmesh-metrics-plugin:eventmesh-metrics-api'
 include 'eventmesh-metrics-plugin:eventmesh-metrics-prometheus'
 
-include 'eventmesh-security-plugin:eventmesh-security-auth-http-basic'
-include 'eventmesh-security-plugin:eventmesh-security-auth-token'
-
 include 'eventmesh-trace-plugin'
 include 'eventmesh-trace-plugin:eventmesh-trace-api'
 include 'eventmesh-trace-plugin:eventmesh-trace-zipkin'
 include 'eventmesh-trace-plugin:eventmesh-trace-pinpoint'
 include 'eventmesh-trace-plugin:eventmesh-trace-jaeger'
 
-
 include 'eventmesh-webhook'
 include 'eventmesh-webhook:eventmesh-webhook-api'
 include 'eventmesh-webhook:eventmesh-webhook-admin'
 include 'eventmesh-webhook:eventmesh-webhook-receive'
-include 'eventmesh-security-plugin'
-include 'eventmesh-security-plugin:eventmesh-security-api'
-include 'eventmesh-security-plugin:eventmesh-security-auth-token'
-include 'eventmesh-connectors:eventmesh-connector-s3'


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to