From f6f4e5379afd8f1816fd161a27b6d19d4978d1ca Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Sat, 28 Jan 2023 01:54:27 +0800
Subject: [PATCH 1/9] [TubeMQ Sink] implement
 org.apache.streampipes.sinks.brokers.jvm.tubemq

---
 pom.xml                                       |   6 +
 .../streampipes-sinks-brokers-jvm/pom.xml     |   4 +
 .../brokers/jvm/tubemq/TubeMQParameters.java  |  46 ++++++++
 .../jvm/tubemq/TubeMQPublisherSink.java       | 106 ++++++++++++++++++
 4 files changed, 162 insertions(+)
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java

diff --git a/pom.xml b/pom.xml
index dda9b6095b..be19236bd9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -185,6 +185,7 @@
 	<snakeyaml.version>1.26</snakeyaml.version>
 	<xerces.version>2.12.2</xerces.version>
 	<zstd-jni.version>1.4.3-1</zstd-jni.version>
+	<inlong.version>1.5.0</inlong.version>
 
 	<maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
 	<maven.javadoc.plugin.version>3.1.1</maven.javadoc.plugin.version>
@@ -1376,6 +1377,11 @@
                 <artifactId>quartz</artifactId>
                 <version>${quartz.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.inlong</groupId>
+                <artifactId>tubemq-client</artifactId>
+                <version>${inlong.version}</version>
+            </dependency>
 
             <!-- dependency convergence -->
             <dependency>
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
index fb63ad3c01..cf3ce5d560 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
@@ -88,6 +88,10 @@
             <artifactId>jnats</artifactId>
             <version>${nats.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.inlong</groupId>
+            <artifactId>tubemq-client</artifactId>
+        </dependency>
 
         <!-- dependency convergence -->
         <dependency>
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.java
new file mode 100644
index 0000000000..9a81f8b51b
--- /dev/null
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQParameters.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.streampipes.sinks.brokers.jvm.tubemq;
+
+import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+
+import static org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink.MASTER_HOST_AND_PORT_KEY;
+import static org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink.TOPIC_KEY;
+
+public class TubeMQParameters {
+
+  private final String masterHostAndPort;
+  private final String topic;
+
+  public TubeMQParameters(SinkParams parameters) {
+    DataSinkParameterExtractor extractor = parameters.extractor();
+
+    this.masterHostAndPort = extractor.singleValueParameter(MASTER_HOST_AND_PORT_KEY, String.class);
+    this.topic = extractor.singleValueParameter(TOPIC_KEY, String.class);
+  }
+
+  public String getMasterHostAndPort() {
+    return masterHostAndPort;
+  }
+
+  public String getTopic() {
+    return topic;
+  }
+}
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java
new file mode 100644
index 0000000000..deeb2dcc3e
--- /dev/null
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/tubemq/TubeMQPublisherSink.java
@@ -0,0 +1,106 @@
+/*
+ * 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.streampipes.sinks.brokers.jvm.tubemq;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.dataformat.SpDataFormatDefinition;
+import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition;
+import org.apache.streampipes.model.DataSinkType;
+import org.apache.streampipes.model.graph.DataSinkDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.sdk.builder.DataSinkBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
+import org.apache.streampipes.wrapper.standalone.SinkParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
+
+import org.apache.inlong.tubemq.client.config.TubeClientConfig;
+import org.apache.inlong.tubemq.client.exception.TubeClientException;
+import org.apache.inlong.tubemq.client.factory.TubeSingleSessionFactory;
+import org.apache.inlong.tubemq.client.producer.MessageProducer;
+import org.apache.inlong.tubemq.client.producer.MessageSentResult;
+import org.apache.inlong.tubemq.corebase.Message;
+
+import java.util.Map;
+
+public class TubeMQPublisherSink extends StreamPipesDataSink {
+
+  public static final String MASTER_HOST_AND_PORT_KEY = "tubemq-master-host-and-port";
+  public static final String TOPIC_KEY = "tubemq-topic";
+
+  private SpDataFormatDefinition spDataFormatDefinition;
+  private String topic;
+
+  private MessageProducer messageProducer;
+
+  @Override
+  public DataSinkDescription declareModel() {
+    return DataSinkBuilder.create("org.apache.streampipes.sinks.brokers.jvm.tubemq").category(DataSinkType.MESSAGING)
+        .withLocales(Locales.EN).withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .requiredStream(StreamRequirementsBuilder.create().requiredProperty(EpRequirements.anyProperty()).build())
+        .requiredTextParameter(Labels.withId(MASTER_HOST_AND_PORT_KEY)).requiredTextParameter(Labels.withId(TOPIC_KEY))
+        .build();
+  }
+
+  @Override
+  public void onInvocation(SinkParams sinkParams, EventSinkRuntimeContext runtimeContext) throws SpRuntimeException {
+    final TubeMQParameters tubeMQParameters = new TubeMQParameters(sinkParams);
+
+    spDataFormatDefinition = new JsonDataFormatDefinition();
+    topic = tubeMQParameters.getTopic();
+
+    final TubeClientConfig tubeClientConfig = new TubeClientConfig(tubeMQParameters.getMasterHostAndPort());
+    try {
+      messageProducer = new TubeSingleSessionFactory(tubeClientConfig).createProducer();
+      messageProducer.publish(topic);
+    } catch (TubeClientException e) {
+      throw new SpRuntimeException(e);
+    }
+  }
+
+  @Override
+  public void onEvent(Event event) throws SpRuntimeException {
+    final Map<String, Object> eventRawMap = event.getRaw();
+    final byte[] eventMessage = spDataFormatDefinition.fromMap(eventRawMap);
+    final Message tubemqMessage = new Message(topic, eventMessage);
+
+    try {
+      final MessageSentResult result = messageProducer.sendMessage(tubemqMessage);
+      if (!result.isSuccess()) {
+        throw new SpRuntimeException(
+            String.format("Failed to send message: %s, because: %s", tubemqMessage, result.getErrMsg()));
+      }
+    } catch (TubeClientException | InterruptedException e) {
+      throw new SpRuntimeException(e);
+    }
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+    try {
+      messageProducer.shutdown();
+    } catch (Throwable e) {
+      throw new SpRuntimeException(e);
+    }
+  }
+}

From 7f69ba26e24c74066ac23996e2f06430e7d1a757 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Sat, 28 Jan 2023 02:48:17 +0800
Subject: [PATCH 2/9] [TubeMQ Sink] registerPipelineElements

---
 .../apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java    | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java
index a6ccb66f42..e242e18e4b 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/java/org/apache/streampipes/sinks/brokers/jvm/BrokersJvmInit.java
@@ -37,6 +37,7 @@
 import org.apache.streampipes.sinks.brokers.jvm.rabbitmq.RabbitMqController;
 import org.apache.streampipes.sinks.brokers.jvm.rest.RestController;
 import org.apache.streampipes.sinks.brokers.jvm.rocketmq.RocketMQPublisherSink;
+import org.apache.streampipes.sinks.brokers.jvm.tubemq.TubeMQPublisherSink;
 import org.apache.streampipes.sinks.brokers.jvm.websocket.WebsocketServerSink;
 
 public class BrokersJvmInit extends ExtensionsModelSubmitter {
@@ -61,6 +62,7 @@ public SpServiceDefinition provideServiceDefinition() {
             new WebsocketServerSink(),
             new PulsarPublisherSink(),
             new RocketMQPublisherSink(),
+            new TubeMQPublisherSink(),
             new NatsController())
         .registerMessagingFormats(
             new JsonDataFormatFactory(),

From b9f7ef33883891b6fba873eb4f7543457a44a39e Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Sat, 28 Jan 2023 17:45:42 +0800
Subject: [PATCH 3/9] [TubeMQ Sink] TubeMQ resources

---
 .../documentation.md                          | 55 +++++++++++++++++++
 .../icon.svg                                  | 21 +++++++
 .../strings.en                                | 25 +++++++++
 3 files changed, 101 insertions(+)
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en

diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
new file mode 100644
index 0000000000..c7f33f6d68
--- /dev/null
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
@@ -0,0 +1,55 @@
+<!--
+  ~ 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.
+  ~
+  -->
+
+## TubeMQ (InLong) Publisher
+
+<p align="center"> 
+    <img src="icon.svg" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Publishes events to Apache TubeMQ (InLong).
+
+***
+
+## Required Inputs
+
+This sink does not have any requirements and works with any incoming event type.
+
+***
+
+## Configuration
+
+### TubeMQ Master Information
+
+This field describes the endpoints of all the TubeMQ masters. 
+
+The format should be like `ip1:port1,ip2:port2,ip3:port3`.
+
+
+### TubeMQ Topic
+
+The topic where events should be sent to.
+
+
+## Output
+
+(not applicable for data sinks)
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
new file mode 100644
index 0000000000..84c73e141c
--- /dev/null
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组 9</title>
+    <defs>
+        <linearGradient x1="21.4018039%" y1="6.67873476%" x2="90.574187%" y2="88.6401169%" id="linearGradient-1">
+            <stop stop-color="#FAAD1A" offset="0%"></stop>
+            <stop stop-color="#FF4444" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="应龙官网" transform="translate(-560.000000, -20.000000)">
+            <g id="1">
+                <g id="top-bar">
+                    <g id="编组-9" transform="translate(560.000000, 20.000000)">
+                        <path d="M39.9853818,19.2973018 C39.9950979,19.5529297 40,19.8097907 40,20.0677966 C40,31.0760486 31.0760486,40 20.0677966,40 C19.8097907,40 19.5529297,39.9950979 19.2973018,39.9853818 L39.9853818,19.2973018 Z M38.3014333,12.1275835 C38.8657526,13.4234274 39.2960338,14.7910849 39.5747667,16.2130456 L16.2130456,39.5747667 C14.7914516,39.2961057 13.4241329,38.8659746 12.1285862,38.30187 L38.3014333,12.1275835 Z M20.0677966,0 C27.3635314,0 33.7499449,3.8932668 37.2627853,9.71554842 L34.4765305,12.5016123 C31.7530746,7.32585554 26.3225853,3.79661017 20.0677966,3.79661017 C11.0814685,3.79661017 3.79661017,11.0814685 3.79661017,20.0677966 C3.79661017,26.3225853 7.32585554,31.7530746 12.5016123,34.4765305 L9.71554842,37.2627853 C3.8932668,33.7499449 0,27.3635314 0,20.0677966 C0,8.98465858 8.98465858,0 20.0677966,0 Z M20.7740808,7.23404255 L20.7740808,11.4142627 C22.3382531,11.3713803 24.0619423,11.9089542 25.1891562,13.0420104 C27.5366028,15.4016241 27.3045322,19.4605871 24.6708121,22.107958 L13.7024154,32.7659574 L11.0638298,30.1095317 L21.9862502,19.4977468 C22.961254,18.5176895 23.0460509,17.013939 22.1756493,16.139026 C21.3052478,15.2641131 19.8092512,15.3493495 18.8342473,16.3294068 L15.3014495,19.9204068 C14.7029075,20.5288097 13.7249835,20.5383696 13.1146618,19.9417842 C12.5032068,19.344091 12.4873719,18.365394 13.0791712,17.7482327 L14.2792437,16.4967299 C14.6589729,16.1007271 14.8593482,15.5661175 14.8334505,15.0180831 L14.8313187,14.9729714 C14.8041908,14.3990284 15.0252251,13.8411438 15.4380759,13.4415182 C16.5407895,12.3741285 17.2449732,11.6983767 17.5506271,11.4142627 C18.2901104,10.726892 19.0879682,10.0625976 19.3413209,7.23404255 L20.7740808,7.23404255 Z M16.8551245,13.4042553 L16.1599092,14.6091995 C16.0518372,14.7965094 16.0322948,15.0200384 16.1025104,15.2208872 L16.1451037,15.3191489 L16.8551245,14.6010638 C17.1829779,14.2694867 17.1829779,13.7358324 16.8551245,13.4042553 Z" id="形状结合" fill="url(#linearGradient-1)"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en
new file mode 100644
index 0000000000..9ac5b877ba
--- /dev/null
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/strings.en
@@ -0,0 +1,25 @@
+#
+# 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.
+#
+
+org.apache.streampipes.sinks.brokers.jvm.tubemq.title=TubeMQ (InLong) Publisher
+org.apache.streampipes.sinks.brokers.jvm.tubemq.description=Publish events to Apache TubeMQ (InLong)
+
+tubemq-master-host-and-port.title=TubeMQ Master Information
+tubemq-master-host-and-port.description=This field describes the endpoints of all the TubeMQ masters. The format should be like "ip1:port1,ip2:port2,ip3:port3".
+
+tubemq-topic.title=TubeMQ Topic
+tubemq-topic.description=Select a TubeMQ topic

From 0d3c75c61bde218952e9f1fea96bdce7b75c90b6 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Sat, 28 Jan 2023 20:53:12 +0800
Subject: [PATCH 4/9] [TubeMQ Adapter] TubeMQ adapter impl

---
 .../streampipes-connect-adapters-iiot/pom.xml |   4 +
 .../connect/iiot/ConnectAdapterIiotInit.java  |   2 +
 .../iiot/protocol/stream/TubeMQProtocol.java  | 210 ++++++++++++++++++
 .../documentation.md                          |  32 +++
 .../icon.svg                                  |  21 ++
 .../strings.en                                |  29 +++
 6 files changed, 298 insertions(+)
 create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java
 create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
 create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
 create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
index eee27f7651..fa3610ee52 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/pom.xml
@@ -147,6 +147,10 @@
             <groupId>org.apache.rocketmq</groupId>
             <artifactId>rocketmq-client-java</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.inlong</groupId>
+            <artifactId>tubemq-client</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcprov-jdk14</artifactId>
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java
index b709eaf8dc..cbac804a7b 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/ConnectAdapterIiotInit.java
@@ -33,6 +33,7 @@
 import org.apache.streampipes.connect.iiot.protocol.stream.KafkaProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.MqttProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.NatsProtocol;
+import org.apache.streampipes.connect.iiot.protocol.stream.TubeMQProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.pulsar.PulsarProtocol;
 import org.apache.streampipes.connect.iiot.protocol.stream.rocketmq.RocketMQProtocol;
 import org.apache.streampipes.extensions.management.model.SpServiceDefinition;
@@ -67,6 +68,7 @@ public SpServiceDefinition provideServiceDefinition() {
         .registerAdapter(new PulsarProtocol())
         .registerAdapter(new RocketMQProtocol())
         .registerAdapter(new HttpServerProtocol())
+        .registerAdapter(new TubeMQProtocol())
         .build();
   }
 }
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java
new file mode 100644
index 0000000000..7a042de33f
--- /dev/null
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/TubeMQProtocol.java
@@ -0,0 +1,210 @@
+/*
+ * 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.streampipes.connect.iiot.protocol.stream;
+
+import org.apache.streampipes.extensions.api.connect.IAdapterPipeline;
+import org.apache.streampipes.extensions.api.connect.IFormat;
+import org.apache.streampipes.extensions.api.connect.IParser;
+import org.apache.streampipes.extensions.api.connect.IProtocol;
+import org.apache.streampipes.extensions.api.connect.exception.AdapterException;
+import org.apache.streampipes.extensions.api.connect.exception.ParseException;
+import org.apache.streampipes.extensions.management.connect.SendToPipeline;
+import org.apache.streampipes.extensions.management.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.model.AdapterType;
+import org.apache.streampipes.model.connect.grounding.ProtocolDescription;
+import org.apache.streampipes.sdk.builder.adapter.ProtocolDescriptionBuilder;
+import org.apache.streampipes.sdk.helpers.AdapterSourceType;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.inlong.tubemq.client.common.PeerInfo;
+import org.apache.inlong.tubemq.client.config.ConsumerConfig;
+import org.apache.inlong.tubemq.client.consumer.ConsumePosition;
+import org.apache.inlong.tubemq.client.consumer.MessageListener;
+import org.apache.inlong.tubemq.client.consumer.PushMessageConsumer;
+import org.apache.inlong.tubemq.client.exception.TubeClientException;
+import org.apache.inlong.tubemq.client.factory.MessageSessionFactory;
+import org.apache.inlong.tubemq.client.factory.TubeSingleSessionFactory;
+import org.apache.inlong.tubemq.corebase.Message;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+
+public class TubeMQProtocol extends BrokerProtocol {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TubeMQProtocol.class);
+
+  public static final String ID = "org.apache.streampipes.connect.iiot.protocol.stream.tubemq";
+
+  public static final String TOPIC_KEY = "tubemq-topic";
+  public static final String MASTER_HOST_AND_PORT_KEY = "tubemq-master-host-and-port";
+  public static final String CONSUMER_GROUP_KEY = "tubemq-consumer-group";
+
+  private String consumerGroup;
+
+  private MessageSessionFactory messageSessionFactory;
+  private PushMessageConsumer pushConsumer;
+
+  public TubeMQProtocol() {
+  }
+
+  private TubeMQProtocol(IParser parser, IFormat format, String masterHostAndPort, String topic, String consumerGroup) {
+    super(parser, format, masterHostAndPort, topic);
+    this.consumerGroup = consumerGroup;
+  }
+
+  @Override
+  public IProtocol getInstance(ProtocolDescription protocolDescription, IParser parser, IFormat format) {
+    final ParameterExtractor extractor = new ParameterExtractor(protocolDescription.getConfig());
+
+    final String masterHostAndPort = extractor.singleValue(MASTER_HOST_AND_PORT_KEY, String.class);
+    final String topic = extractor.singleValue(TOPIC_KEY, String.class);
+    final String consumerGroup = extractor.singleValue(CONSUMER_GROUP_KEY, String.class);
+
+    return new TubeMQProtocol(parser, format, masterHostAndPort, topic, consumerGroup);
+  }
+
+  @Override
+  public ProtocolDescription declareModel() {
+    return ProtocolDescriptionBuilder.create(ID).withAssets(Assets.DOCUMENTATION, Assets.ICON).withLocales(Locales.EN)
+        .category(AdapterType.Generic).sourceType(AdapterSourceType.STREAM)
+        .requiredTextParameter(Labels.withId(MASTER_HOST_AND_PORT_KEY)).requiredTextParameter(Labels.withId(TOPIC_KEY))
+        .requiredTextParameter(Labels.withId(CONSUMER_GROUP_KEY)).build();
+  }
+
+  @Override
+  public void run(IAdapterPipeline adapterPipeline) throws AdapterException {
+    final SendToPipeline sendToPipeline = new SendToPipeline(format, adapterPipeline);
+
+    final ConsumerConfig consumerConfig = new ConsumerConfig(brokerUrl, consumerGroup);
+    consumerConfig.setConsumePosition(ConsumePosition.CONSUMER_FROM_LATEST_OFFSET);
+
+    try {
+      messageSessionFactory = new TubeSingleSessionFactory(consumerConfig);
+      pushConsumer = messageSessionFactory.createPushConsumer(consumerConfig);
+
+      pushConsumer.subscribe(topic, null, new MessageListener() {
+        @Override
+        public void receiveMessages(PeerInfo peerInfo, List<Message> messages) {
+          for (final Message message : messages) {
+            try {
+              parser.parse(IOUtils.toInputStream(new String(message.getData()), "UTF-8"), sendToPipeline);
+            } catch (ParseException e) {
+              LOGGER.error("Error while parsing: " + e.getMessage());
+              e.printStackTrace();
+            }
+          }
+        }
+
+        @Override
+        public Executor getExecutor() {
+          return null;
+        }
+
+        @Override
+        public void stop() {
+        }
+      });
+      pushConsumer.completeSubscribe();
+    } catch (TubeClientException e) {
+      shutdown(messageSessionFactory, pushConsumer);
+      throw new AdapterException("Failed to create TubeMQ adapter.", e);
+    }
+  }
+
+  @Override
+  public void stop() {
+    shutdown(messageSessionFactory, pushConsumer);
+  }
+
+  @Override
+  public String getId() {
+    return ID;
+  }
+
+  @Override
+  protected List<byte[]> getNByteElements(int n) throws ParseException {
+    final List<byte[]> elements = new ArrayList<>();
+
+    final ConsumerConfig consumerConfig = new ConsumerConfig(brokerUrl, consumerGroup);
+    consumerConfig.setConsumePosition(ConsumePosition.CONSUMER_FROM_FIRST_OFFSET);
+
+    MessageSessionFactory messageSessionFactory = null;
+    PushMessageConsumer pushConsumer = null;
+    try {
+      messageSessionFactory = new TubeSingleSessionFactory(consumerConfig);
+      pushConsumer = messageSessionFactory.createPushConsumer(consumerConfig);
+
+      final CountDownLatch countDownLatch = new CountDownLatch(n);
+      pushConsumer.subscribe(topic, null, new MessageListener() {
+        @Override
+        public void receiveMessages(PeerInfo peerInfo, List<Message> messages) {
+          for (final Message message : messages) {
+            if (countDownLatch.getCount() == 0) {
+              return;
+            }
+            elements.add(message.getData());
+            countDownLatch.countDown();
+          }
+        }
+
+        @Override
+        public Executor getExecutor() {
+          return null;
+        }
+
+        @Override
+        public void stop() {
+        }
+      });
+      pushConsumer.completeSubscribe();
+      countDownLatch.await();
+    } catch (TubeClientException | InterruptedException e) {
+      throw new ParseException("Failed to getNByteElements", e);
+    } finally {
+      shutdown(messageSessionFactory, pushConsumer);
+    }
+
+    return elements;
+  }
+
+  private static void shutdown(MessageSessionFactory messageSessionFactory, PushMessageConsumer pushConsumer) {
+    if (pushConsumer != null && !pushConsumer.isShutdown()) {
+      try {
+        pushConsumer.shutdown();
+      } catch (Throwable ex) {
+        LOGGER.error("Failed to stop pushConsumer when TubeClientException occurred.");
+      }
+    }
+
+    if (messageSessionFactory != null) {
+      try {
+        messageSessionFactory.shutdown();
+      } catch (TubeClientException ex) {
+        LOGGER.error("Failed to stop messageSessionFactory when TubeClientException occurred.");
+      }
+    }
+  }
+}
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
new file mode 100644
index 0000000000..c553592158
--- /dev/null
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
@@ -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.
+  ~
+  -->
+
+## Apache TubeMQ (InLong)
+
+<p align="center"> 
+    <img src="icon.svg" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Consumes messages from an Apache TubeMQ broker.
+
+***
+
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
new file mode 100644
index 0000000000..84c73e141c
--- /dev/null
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组 9</title>
+    <defs>
+        <linearGradient x1="21.4018039%" y1="6.67873476%" x2="90.574187%" y2="88.6401169%" id="linearGradient-1">
+            <stop stop-color="#FAAD1A" offset="0%"></stop>
+            <stop stop-color="#FF4444" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="应龙官网" transform="translate(-560.000000, -20.000000)">
+            <g id="1">
+                <g id="top-bar">
+                    <g id="编组-9" transform="translate(560.000000, 20.000000)">
+                        <path d="M39.9853818,19.2973018 C39.9950979,19.5529297 40,19.8097907 40,20.0677966 C40,31.0760486 31.0760486,40 20.0677966,40 C19.8097907,40 19.5529297,39.9950979 19.2973018,39.9853818 L39.9853818,19.2973018 Z M38.3014333,12.1275835 C38.8657526,13.4234274 39.2960338,14.7910849 39.5747667,16.2130456 L16.2130456,39.5747667 C14.7914516,39.2961057 13.4241329,38.8659746 12.1285862,38.30187 L38.3014333,12.1275835 Z M20.0677966,0 C27.3635314,0 33.7499449,3.8932668 37.2627853,9.71554842 L34.4765305,12.5016123 C31.7530746,7.32585554 26.3225853,3.79661017 20.0677966,3.79661017 C11.0814685,3.79661017 3.79661017,11.0814685 3.79661017,20.0677966 C3.79661017,26.3225853 7.32585554,31.7530746 12.5016123,34.4765305 L9.71554842,37.2627853 C3.8932668,33.7499449 0,27.3635314 0,20.0677966 C0,8.98465858 8.98465858,0 20.0677966,0 Z M20.7740808,7.23404255 L20.7740808,11.4142627 C22.3382531,11.3713803 24.0619423,11.9089542 25.1891562,13.0420104 C27.5366028,15.4016241 27.3045322,19.4605871 24.6708121,22.107958 L13.7024154,32.7659574 L11.0638298,30.1095317 L21.9862502,19.4977468 C22.961254,18.5176895 23.0460509,17.013939 22.1756493,16.139026 C21.3052478,15.2641131 19.8092512,15.3493495 18.8342473,16.3294068 L15.3014495,19.9204068 C14.7029075,20.5288097 13.7249835,20.5383696 13.1146618,19.9417842 C12.5032068,19.344091 12.4873719,18.365394 13.0791712,17.7482327 L14.2792437,16.4967299 C14.6589729,16.1007271 14.8593482,15.5661175 14.8334505,15.0180831 L14.8313187,14.9729714 C14.8041908,14.3990284 15.0252251,13.8411438 15.4380759,13.4415182 C16.5407895,12.3741285 17.2449732,11.6983767 17.5506271,11.4142627 C18.2901104,10.726892 19.0879682,10.0625976 19.3413209,7.23404255 L20.7740808,7.23404255 Z M16.8551245,13.4042553 L16.1599092,14.6091995 C16.0518372,14.7965094 16.0322948,15.0200384 16.1025104,15.2208872 L16.1451037,15.3191489 L16.8551245,14.6010638 C17.1829779,14.2694867 17.1829779,13.7358324 16.8551245,13.4042553 Z" id="形状结合" fill="url(#linearGradient-1)"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en
new file mode 100644
index 0000000000..d8eadb8d06
--- /dev/null
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/strings.en
@@ -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.
+#
+
+
+org.apache.streampipes.connect.iiot.protocol.stream.tubemq.title=Apache TubeMQ (InLong)
+org.apache.streampipes.connect.iiot.protocol.stream.tubemq.description=Consumes messages from an Apache TubeMQ (InLong) broker.
+
+tubemq-master-host-and-port.title=TubeMQ Master Information
+tubemq-master-host-and-port.description=This field describes the endpoints of all the TubeMQ masters. The format should be like "ip1:port1,ip2:port2,ip3:port3".
+
+tubemq-consumer-group.title=TubeMQ Consumer Group
+tubemq-consumer-group.description=The consumer group of the TubeMQ Consumer
+
+tubemq-topic.title=TubeMQ Topic
+tubemq-topic.description=Select a TubeMQ topic

From dbb958df51629c512b09fbd5001fa23cd4f3d5a9 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Mon, 30 Jan 2023 19:22:32 +0800
Subject: [PATCH 5/9] [TubeMQ] docker-compose

---
 .../standalone/tubemq/docker-compose.dev.yml  | 22 ++++++++++++
 .../standalone/tubemq/docker-compose.yml      | 35 +++++++++++++++++++
 .../icon.svg                                  | 18 ++++++++++
 .../icon.svg                                  | 18 ++++++++++
 4 files changed, 93 insertions(+)
 create mode 100644 installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
 create mode 100644 installer/cli/deploy/standalone/tubemq/docker-compose.yml

diff --git a/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
new file mode 100644
index 0000000000..1a9ad43eba
--- /dev/null
+++ b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
@@ -0,0 +1,22 @@
+# 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.
+
+version: "3.4"
+services:
+  iotdb:
+    image: inlong/tubemq-all:1.5.0
+    ports:
+      - "8715:8715"
+      - "8123:8123"
diff --git a/installer/cli/deploy/standalone/tubemq/docker-compose.yml b/installer/cli/deploy/standalone/tubemq/docker-compose.yml
new file mode 100644
index 0000000000..d0788518a4
--- /dev/null
+++ b/installer/cli/deploy/standalone/tubemq/docker-compose.yml
@@ -0,0 +1,35 @@
+# 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.
+
+version: "3.4"
+services:
+  kafka:
+    image: inlong/tubemq-all:1.5.0
+    volumes:
+      - tubemq:/tubemq
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "1m"
+        max-file: "1"
+    networks:
+      spnet:
+
+volumes:
+  tubemq:
+
+networks:
+  spnet:
+    external: true
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
index 84c73e141c..d440e3890e 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+
 <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     <title>编组 9</title>
     <defs>
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
index 84c73e141c..d440e3890e 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+
 <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     <title>编组 9</title>
     <defs>

From 3d4045b903b40a48644b8ac181032b1627313941 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Tue, 31 Jan 2023 11:55:36 +0800
Subject: [PATCH 6/9] [TubeMQ] fix resources: icon.svg -> icon.png

---
 .../documentation.md                          |   2 +-
 .../icon.png                                  | Bin 0 -> 22024 bytes
 .../icon.svg                                  |  39 ------------------
 .../documentation.md                          |   2 +-
 .../icon.png                                  | Bin 0 -> 22024 bytes
 .../icon.svg                                  |  39 ------------------
 6 files changed, 2 insertions(+), 80 deletions(-)
 create mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png
 delete mode 100644 streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
 create mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png
 delete mode 100644 streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
index c553592158..abff21b141 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
@@ -19,7 +19,7 @@
 ## Apache TubeMQ (InLong)
 
 <p align="center"> 
-    <img src="icon.svg" width="150px;" class="pe-image-documentation"/>
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
 </p>
 
 ***
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c0fde0bc4aa812cf53fdc005eaef3bd79d63f4f
GIT binary patch
literal 22024
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

literal 0
HcmV?d00001

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
deleted file mode 100644
index d440e3890e..0000000000
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/icon.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>编组 9</title>
-    <defs>
-        <linearGradient x1="21.4018039%" y1="6.67873476%" x2="90.574187%" y2="88.6401169%" id="linearGradient-1">
-            <stop stop-color="#FAAD1A" offset="0%"></stop>
-            <stop stop-color="#FF4444" offset="100%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="应龙官网" transform="translate(-560.000000, -20.000000)">
-            <g id="1">
-                <g id="top-bar">
-                    <g id="编组-9" transform="translate(560.000000, 20.000000)">
-                        <path d="M39.9853818,19.2973018 C39.9950979,19.5529297 40,19.8097907 40,20.0677966 C40,31.0760486 31.0760486,40 20.0677966,40 C19.8097907,40 19.5529297,39.9950979 19.2973018,39.9853818 L39.9853818,19.2973018 Z M38.3014333,12.1275835 C38.8657526,13.4234274 39.2960338,14.7910849 39.5747667,16.2130456 L16.2130456,39.5747667 C14.7914516,39.2961057 13.4241329,38.8659746 12.1285862,38.30187 L38.3014333,12.1275835 Z M20.0677966,0 C27.3635314,0 33.7499449,3.8932668 37.2627853,9.71554842 L34.4765305,12.5016123 C31.7530746,7.32585554 26.3225853,3.79661017 20.0677966,3.79661017 C11.0814685,3.79661017 3.79661017,11.0814685 3.79661017,20.0677966 C3.79661017,26.3225853 7.32585554,31.7530746 12.5016123,34.4765305 L9.71554842,37.2627853 C3.8932668,33.7499449 0,27.3635314 0,20.0677966 C0,8.98465858 8.98465858,0 20.0677966,0 Z M20.7740808,7.23404255 L20.7740808,11.4142627 C22.3382531,11.3713803 24.0619423,11.9089542 25.1891562,13.0420104 C27.5366028,15.4016241 27.3045322,19.4605871 24.6708121,22.107958 L13.7024154,32.7659574 L11.0638298,30.1095317 L21.9862502,19.4977468 C22.961254,18.5176895 23.0460509,17.013939 22.1756493,16.139026 C21.3052478,15.2641131 19.8092512,15.3493495 18.8342473,16.3294068 L15.3014495,19.9204068 C14.7029075,20.5288097 13.7249835,20.5383696 13.1146618,19.9417842 C12.5032068,19.344091 12.4873719,18.365394 13.0791712,17.7482327 L14.2792437,16.4967299 C14.6589729,16.1007271 14.8593482,15.5661175 14.8334505,15.0180831 L14.8313187,14.9729714 C14.8041908,14.3990284 15.0252251,13.8411438 15.4380759,13.4415182 C16.5407895,12.3741285 17.2449732,11.6983767 17.5506271,11.4142627 C18.2901104,10.726892 19.0879682,10.0625976 19.3413209,7.23404255 L20.7740808,7.23404255 Z M16.8551245,13.4042553 L16.1599092,14.6091995 C16.0518372,14.7965094 16.0322948,15.0200384 16.1025104,15.2208872 L16.1451037,15.3191489 L16.8551245,14.6010638 C17.1829779,14.2694867 17.1829779,13.7358324 16.8551245,13.4042553 Z" id="形状结合" fill="url(#linearGradient-1)"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
index c7f33f6d68..6971c693d6 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/documentation.md
@@ -19,7 +19,7 @@
 ## TubeMQ (InLong) Publisher
 
 <p align="center"> 
-    <img src="icon.svg" width="150px;" class="pe-image-documentation"/>
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
 </p>
 
 ***
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c0fde0bc4aa812cf53fdc005eaef3bd79d63f4f
GIT binary patch
literal 22024
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

literal 0
HcmV?d00001

diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg b/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
deleted file mode 100644
index d440e3890e..0000000000
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/src/main/resources/org.apache.streampipes.sinks.brokers.jvm.tubemq/icon.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>编组 9</title>
-    <defs>
-        <linearGradient x1="21.4018039%" y1="6.67873476%" x2="90.574187%" y2="88.6401169%" id="linearGradient-1">
-            <stop stop-color="#FAAD1A" offset="0%"></stop>
-            <stop stop-color="#FF4444" offset="100%"></stop>
-        </linearGradient>
-    </defs>
-    <g id="页面1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="应龙官网" transform="translate(-560.000000, -20.000000)">
-            <g id="1">
-                <g id="top-bar">
-                    <g id="编组-9" transform="translate(560.000000, 20.000000)">
-                        <path d="M39.9853818,19.2973018 C39.9950979,19.5529297 40,19.8097907 40,20.0677966 C40,31.0760486 31.0760486,40 20.0677966,40 C19.8097907,40 19.5529297,39.9950979 19.2973018,39.9853818 L39.9853818,19.2973018 Z M38.3014333,12.1275835 C38.8657526,13.4234274 39.2960338,14.7910849 39.5747667,16.2130456 L16.2130456,39.5747667 C14.7914516,39.2961057 13.4241329,38.8659746 12.1285862,38.30187 L38.3014333,12.1275835 Z M20.0677966,0 C27.3635314,0 33.7499449,3.8932668 37.2627853,9.71554842 L34.4765305,12.5016123 C31.7530746,7.32585554 26.3225853,3.79661017 20.0677966,3.79661017 C11.0814685,3.79661017 3.79661017,11.0814685 3.79661017,20.0677966 C3.79661017,26.3225853 7.32585554,31.7530746 12.5016123,34.4765305 L9.71554842,37.2627853 C3.8932668,33.7499449 0,27.3635314 0,20.0677966 C0,8.98465858 8.98465858,0 20.0677966,0 Z M20.7740808,7.23404255 L20.7740808,11.4142627 C22.3382531,11.3713803 24.0619423,11.9089542 25.1891562,13.0420104 C27.5366028,15.4016241 27.3045322,19.4605871 24.6708121,22.107958 L13.7024154,32.7659574 L11.0638298,30.1095317 L21.9862502,19.4977468 C22.961254,18.5176895 23.0460509,17.013939 22.1756493,16.139026 C21.3052478,15.2641131 19.8092512,15.3493495 18.8342473,16.3294068 L15.3014495,19.9204068 C14.7029075,20.5288097 13.7249835,20.5383696 13.1146618,19.9417842 C12.5032068,19.344091 12.4873719,18.365394 13.0791712,17.7482327 L14.2792437,16.4967299 C14.6589729,16.1007271 14.8593482,15.5661175 14.8334505,15.0180831 L14.8313187,14.9729714 C14.8041908,14.3990284 15.0252251,13.8411438 15.4380759,13.4415182 C16.5407895,12.3741285 17.2449732,11.6983767 17.5506271,11.4142627 C18.2901104,10.726892 19.0879682,10.0625976 19.3413209,7.23404255 L20.7740808,7.23404255 Z M16.8551245,13.4042553 L16.1599092,14.6091995 C16.0518372,14.7965094 16.0322948,15.0200384 16.1025104,15.2208872 L16.1451037,15.3191489 L16.8551245,14.6010638 C17.1829779,14.2694867 17.1829779,13.7358324 16.8551245,13.4042553 Z" id="形状结合" fill="url(#linearGradient-1)"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file

From d7c96be61d201265b1d3ecf14dbe77e58a2a3702 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Tue, 31 Jan 2023 12:01:02 +0800
Subject: [PATCH 7/9] [TubeMQ] expose 8080 and 8081 in dev.docker

---
 installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
index 1a9ad43eba..67e06f5fef 100644
--- a/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
+++ b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
@@ -20,3 +20,6 @@ services:
     ports:
       - "8715:8715"
       - "8123:8123"
+      # web
+      - "8080:8080"
+      - "8081:8081"

From c20e70f8aac778c107fe672d3fe32d7abe82a072 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Wed, 1 Feb 2023 15:09:48 +0800
Subject: [PATCH 8/9] [TubeMQ] change service name in docker file to "tubemq"

---
 installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml | 2 +-
 installer/cli/deploy/standalone/tubemq/docker-compose.yml     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
index 67e06f5fef..44ae40e081 100644
--- a/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
+++ b/installer/cli/deploy/standalone/tubemq/docker-compose.dev.yml
@@ -15,7 +15,7 @@
 
 version: "3.4"
 services:
-  iotdb:
+  tubemq:
     image: inlong/tubemq-all:1.5.0
     ports:
       - "8715:8715"
diff --git a/installer/cli/deploy/standalone/tubemq/docker-compose.yml b/installer/cli/deploy/standalone/tubemq/docker-compose.yml
index d0788518a4..af677fd5cb 100644
--- a/installer/cli/deploy/standalone/tubemq/docker-compose.yml
+++ b/installer/cli/deploy/standalone/tubemq/docker-compose.yml
@@ -15,7 +15,7 @@
 
 version: "3.4"
 services:
-  kafka:
+  tubemq:
     image: inlong/tubemq-all:1.5.0
     volumes:
       - tubemq:/tubemq

From 06d051236592bdf45974a5db921cda1a63fd2556 Mon Sep 17 00:00:00 2001
From: Steve Yurong Su <rong@apache.org>
Date: Thu, 2 Feb 2023 10:41:52 +0800
Subject: [PATCH 9/9] [TubeMQ Adapter] add a short description of the input
 parameters in doc

---
 .../documentation.md                             | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
index abff21b141..dbc91d9c26 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/resources/org.apache.streampipes.connect.iiot.protocol.stream.tubemq/documentation.md
@@ -30,3 +30,19 @@ Consumes messages from an Apache TubeMQ broker.
 
 ***
 
+## Configuration
+
+### TubeMQ Master Information
+
+This field describes the endpoints of all the TubeMQ masters.
+
+The format should be like `ip1:port1,ip2:port2,ip3:port3`.
+
+### TubeMQ Topic
+
+The topic where events should be sent to.
+
+### TubeMQ Consumer Group
+
+The consumer group of the TubeMQ Consumer.
+