You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by GitBox <gi...@apache.org> on 2022/03/08 06:27:56 UTC

[GitHub] [rocketmq-connect] 2011shenlin commented on a change in pull request #2: [ISSUE #10] Add ding talk sink

2011shenlin commented on a change in pull request #2:
URL: https://github.com/apache/rocketmq-connect/pull/2#discussion_r821296507



##########
File path: connectors/aliyun/rocketmq-connect-dingtalk/src/main/java/com/aliyun/rocketmq/connect/dingtalk/sink/DingTalkSinkConnector.java
##########
@@ -0,0 +1,61 @@
+package com.aliyun.rocketmq.connect.dingtalk.sink;
+
+import com.aliyun.rocketmq.connect.dingtalk.sink.constant.DingTalkConstant;
+import io.openmessaging.KeyValue;
+import io.openmessaging.connector.api.component.task.Task;
+import io.openmessaging.connector.api.component.task.sink.SinkConnector;
+import io.openmessaging.internal.DefaultKeyValue;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DingTalkSinkConnector extends SinkConnector {
+
+    private String webHook;
+
+    private String msgType;
+
+    @Override
+    public void pause() {
+
+    }
+
+    @Override
+    public void resume() {
+
+    }
+
+    @Override
+    public List<KeyValue> taskConfigs(int maxTasks) {
+        List<KeyValue> taskConfigList = new ArrayList<>(11);
+        KeyValue keyValue = new DefaultKeyValue();
+        keyValue.put(DingTalkConstant.WEB_HOOK, webHook);
+        keyValue.put(DingTalkConstant.MSG_TYPE_CONSTANT, msgType);
+        taskConfigList.add(keyValue);

Review comment:
       If the configuration items of SinkConnector and SinkTask are the same, could return the SinkConnector config directly,Avoid duplicate code between SinkConnector and SinkTask about configuration item extraction

##########
File path: connectors/aliyun/rocketmq-connect-dingtalk/src/main/java/com/aliyun/rocketmq/connect/dingtalk/sink/DingTalkSinkTask.java
##########
@@ -0,0 +1,77 @@
+package com.aliyun.rocketmq.connect.dingtalk.sink;
+
+import com.alibaba.fastjson.JSON;
+import com.aliyun.rocketmq.connect.dingtalk.sink.common.OkHttpUtils;
+import com.aliyun.rocketmq.connect.dingtalk.sink.constant.DingTalkConstant;
+import io.openmessaging.KeyValue;
+import io.openmessaging.connector.api.component.task.sink.SinkTask;
+import io.openmessaging.connector.api.component.task.sink.SinkTaskContext;
+import io.openmessaging.connector.api.data.ConnectRecord;
+import io.openmessaging.connector.api.errors.ConnectException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DingTalkSinkTask extends SinkTask {
+    private static final Logger log = LoggerFactory.getLogger(DingTalkSinkTask.class);
+
+    private String webHook;
+
+    private String msgType;
+
+    @Override
+    public void put(List<ConnectRecord> sinkRecords) throws ConnectException {
+        try {
+            sinkRecords.forEach(sinkRecord -> {
+                Map<String, Object> objectMap = new HashMap<>();
+                objectMap.put(DingTalkConstant.CONTENT_CONSTANT, sinkRecord.getData());

Review comment:
       connect data needs to support trasform configuration.

##########
File path: connectors/aliyun/rocketmq-connect-dingtalk/src/main/java/com/aliyun/rocketmq/connect/dingtalk/sink/DingTalkSinkTask.java
##########
@@ -0,0 +1,77 @@
+package com.aliyun.rocketmq.connect.dingtalk.sink;
+
+import com.alibaba.fastjson.JSON;
+import com.aliyun.rocketmq.connect.dingtalk.sink.common.OkHttpUtils;
+import com.aliyun.rocketmq.connect.dingtalk.sink.constant.DingTalkConstant;
+import io.openmessaging.KeyValue;
+import io.openmessaging.connector.api.component.task.sink.SinkTask;
+import io.openmessaging.connector.api.component.task.sink.SinkTaskContext;
+import io.openmessaging.connector.api.data.ConnectRecord;
+import io.openmessaging.connector.api.errors.ConnectException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DingTalkSinkTask extends SinkTask {
+    private static final Logger log = LoggerFactory.getLogger(DingTalkSinkTask.class);
+
+    private String webHook;
+
+    private String msgType;
+
+    @Override
+    public void put(List<ConnectRecord> sinkRecords) throws ConnectException {
+        try {
+            sinkRecords.forEach(sinkRecord -> {
+                Map<String, Object> objectMap = new HashMap<>();
+                objectMap.put(DingTalkConstant.CONTENT_CONSTANT, sinkRecord.getData());
+                OkHttpUtils.builder()
+                        .url(webHook)
+                        .addParam(DingTalkConstant.MSG_TYPE_CONSTANT, msgType)
+                        .addParam(msgType, JSON.toJSONString(objectMap))
+                        .addHeader(DingTalkConstant.CONTENT_TYPE, DingTalkConstant.APPLICATION_JSON_UTF_8_TYPE)
+                        .post(true)
+                        .sync();
+            });
+        } catch (Exception e) {
+            log.error("DingTalkSinkTask | put | error => ", e);
+        }
+    }
+
+    @Override
+    public void pause() {
+
+    }
+
+    @Override
+    public void resume() {
+
+    }
+
+    @Override
+    public void validate(KeyValue config) {
+        if (StringUtils.isBlank(config.getString(DingTalkConstant.WEB_HOOK))) {
+            throw new RuntimeException("ding talk required parameter is null !");
+        }

Review comment:
       should check the endpoint、param of webhook.

##########
File path: connectors/aliyun/rocketmq-connect-dingtalk/src/main/resources/log4j.properties
##########
@@ -0,0 +1,22 @@
+log4j.rootCategory=INFO, console
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
+
+log4j.logger.org.apache.spark.repl.Main=WARN
+
+# Settings to quiet third party logs that are too verbose
+log4j.logger.org.sparkproject.jetty=WARN
+log4j.logger.org.sparkproject.jetty.util.component.AbstractLifeCycle=ERROR
+log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO

Review comment:
       Remove logback config if not necessary.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@rocketmq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org