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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�y$wn}((tiP${YIHMsweZ4PWH}dC}t; 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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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�y$wn}((tiP${YIHMsweZ4PWH}dC}t; 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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. +