Pārlūkot izejas kodu

优化http节点

caixiaofeng 5 mēneši atpakaļ
vecāks
revīzija
222fe9b853

+ 1 - 1
flow-system/flow-system-entity/src/main/java/com/flow/entity/User.java

@@ -3,12 +3,12 @@ package com.flow.entity;
 import com.baomidou.mybatisplus.annotation.SqlCondition;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.flow.common.mybatis.entity.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.codehaus.jackson.annotate.JsonIgnore;
 
 import java.util.Set;
 

+ 22 - 0
flow-workflow/flow-workflow-biz/src/main/java/com/flow/behavior/CustomHttpServiceTaskActivityBehavior.java

@@ -0,0 +1,22 @@
+package com.flow.behavior;
+
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.common.engine.api.async.AsyncTaskInvoker;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.impl.bpmn.http.DefaultBpmnHttpActivityDelegate;
+
+import java.util.concurrent.CompletableFuture;
+
+@Slf4j
+public class CustomHttpServiceTaskActivityBehavior extends DefaultBpmnHttpActivityDelegate {
+
+    @Override
+    public CompletableFuture<ExecutionData> execute(DelegateExecution execution, AsyncTaskInvoker taskInvoker) {
+        return super.execute(execution, taskInvoker);
+    }
+
+    @Override
+    public void afterExecution(DelegateExecution execution, ExecutionData result) {
+        super.afterExecution(execution, result);
+    }
+}

+ 2 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/constant/NodeTypeConstant.java

@@ -23,6 +23,8 @@ public interface NodeTypeConstant {
     String NOTIFY = "notify";
     // 跳转
     String JUMP = "jump";
+    // HTTP
+    String HTTP = "http";
     // 结束
     String END = "end";
 }

+ 44 - 16
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/HttpNode.java

@@ -1,12 +1,10 @@
 package com.flow.entity.node;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.google.common.collect.Lists;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.flowable.bpmn.model.FieldExtension;
-import org.flowable.bpmn.model.FlowElement;
-import org.flowable.bpmn.model.HttpServiceTask;
-import org.flowable.bpmn.model.SequenceFlow;
+import org.flowable.bpmn.model.*;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -18,10 +16,10 @@ import java.util.Objects;
 public class HttpNode extends Node {
     private String url;
     private String method;
-    private Map<String,Object> headers;
-    private Map<String,Object> requestBody;
-    private Boolean ignoreException;
-    private Long requestTimeout;
+    private Map<String, Object> headers;
+    private Map<String, Object> requestBody;
+    private Boolean ignoreException = false;
+    private Long requestTimeout = 0L;
 
 
     @Override
@@ -29,8 +27,11 @@ public class HttpNode extends Node {
         ArrayList<FlowElement> elements = Lists.newArrayList();
         HttpServiceTask httpServiceTask = new HttpServiceTask();
         httpServiceTask.setId(this.getId());
+        httpServiceTask.setType("http");
         httpServiceTask.setName(this.getName());
         httpServiceTask.setExecutionListeners(this.buidEventListener());
+        httpServiceTask.setAsynchronous(false);
+        httpServiceTask.setParallelInSameTransaction(true);
         // httpServiceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
         // httpServiceTask.setImplementation("${httpDelegate}");
         // 请求参数
@@ -43,14 +44,18 @@ public class HttpNode extends Node {
         methodExtension.setFieldName("requestMethod");
         methodExtension.setStringValue(this.method);
         fieldExtensions.add(methodExtension);
-        FieldExtension headerExtension = new FieldExtension();
-        headerExtension.setFieldName("requestHeaders");
-        headerExtension.setExpression(this.headers.toString());
-        fieldExtensions.add(headerExtension);
-        FieldExtension bodyExtension = new FieldExtension();
-        bodyExtension.setFieldName("requestBody");
-        bodyExtension.setExpression(this.requestBody.toString());
-        fieldExtensions.add(bodyExtension);
+        if (CollectionUtils.isNotEmpty(this.headers)) {
+            FieldExtension headerExtension = new FieldExtension();
+            headerExtension.setFieldName("requestHeaders");
+            headerExtension.setExpression(this.headers.toString());
+            fieldExtensions.add(headerExtension);
+        }
+        if (CollectionUtils.isNotEmpty(this.requestBody)) {
+            FieldExtension bodyExtension = new FieldExtension();
+            bodyExtension.setFieldName("requestBody");
+            bodyExtension.setExpression(this.requestBody.toString());
+            fieldExtensions.add(bodyExtension);
+        }
         FieldExtension ignoreExtension = new FieldExtension();
         ignoreExtension.setFieldName("ignoreException");
         ignoreExtension.setStringValue(this.ignoreException.toString());
@@ -59,7 +64,30 @@ public class HttpNode extends Node {
         timeoutExtension.setFieldName("requestTimeout");
         timeoutExtension.setStringValue(this.requestTimeout.toString());
         fieldExtensions.add(timeoutExtension);
+        FieldExtension failCodesExtension = new FieldExtension();
+        failCodesExtension.setFieldName("failStatusCodes");
+        failCodesExtension.setStringValue("400,401,403,404,500,503");
+        fieldExtensions.add(failCodesExtension);
+        FieldExtension handleCodesExtension = new FieldExtension();
+        handleCodesExtension.setFieldName("handleStatusCodes");
+        handleCodesExtension.setStringValue("200");
+        fieldExtensions.add(handleCodesExtension);
+        FieldExtension saveResponseBodyExtension = new FieldExtension();
+        saveResponseBodyExtension.setFieldName("saveResponseVariableAsJson");
+        saveResponseBodyExtension.setStringValue("true");
+        fieldExtensions.add(saveResponseBodyExtension);
+        FieldExtension activityBehaviorExtension = new FieldExtension();
+        activityBehaviorExtension.setFieldName("httpActivityBehaviorClass");
+        activityBehaviorExtension.setStringValue("com.flow.behavior.CustomHttpServiceTaskActivityBehavior");
+        // fieldExtensions.add(activityBehaviorExtension);
         httpServiceTask.setFieldExtensions(fieldExtensions);
+        // 失败重试
+        ExtensionElement retryElement = new ExtensionElement();
+        retryElement.setNamespace("https://flowable.org/model");
+        retryElement.setNamespacePrefix("flowable");
+        retryElement.setName("failedJobRetryTimeCycle");
+        retryElement.setElementText("R5/PT5M");
+        // httpServiceTask.addExtensionElement(retryElement);
         elements.add(httpServiceTask);
         // 下一个节点的连线
         Node child = this.getChild();

+ 1 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/Node.java

@@ -33,6 +33,7 @@ import java.util.stream.Collectors;
         @JsonSubTypes.Type(value = TimerNode.class, name = NodeTypeConstant.TIMER),
         @JsonSubTypes.Type(value = NotifyNode.class, name = NodeTypeConstant.NOTIFY),
         @JsonSubTypes.Type(value = JumpNode.class, name = NodeTypeConstant.JUMP),
+        @JsonSubTypes.Type(value = HttpNode.class, name = NodeTypeConstant.HTTP),
         @JsonSubTypes.Type(value = EndNode.class, name = NodeTypeConstant.END)
 })
 public abstract class Node implements Serializable {