关于#dolphinschedulerapi#的问题,如何解决?(标签-java|关键词-传参数)

求解答,解决问题有偿支付!
需求:在java中调dolphinscheduler 接口并传递参数,在海豚node中能够接收到参数
dolphinscheduler api
在java程序中调用projects/{projectCode}/executors/start-process-instance这个接口传参数

img


startParams传了参数

img


但是在海豚任务重接收不到

img

可以这么做:

  1. 在DolphinScheduler的API文档中找到projects/{projectCode}/executors/start-process-instance接口,这是启动一个任务实例的接口。
  2. 准备参数:
  • projectCode: 项目编码
  • executorId: 执行者ID
  • commandType: 命令类型,这里填RUN_PROCESS_INSTANCE
  • processInstance: 进程实例对象,需要构造如下:
json
{
  "processDefinitionCode": "process_code",   // 流程定义code
  "commandType": "START_PROCESS",           // 命令类型
  "scheduleTime": "",                       // 任务调度时间
  "source": "",                             // 来源
  "processInstanceName": "实例名称",        // 实例名称
  "globalParams": [                         // 全局参数
      {
         "prop": "param1",
         "direct": "IN",    
         "value": "value1"
      }
  ],
  "tasks": [                                // 任务参数
      {  
         "taskCode": "task1",                      
         "taskParams": [
            {
               "prop": "param2",
               "direct": "IN",    
               "value": "value2"
            }
         ]
      }
   ]   
}
3. 使用任意Java HTTP客户端(如OkHttp),调用DolphinScheduler的API,传递上述参数:
java
String url = "http://dolphinscheduler-server/projects/project1/executors/start-process-instance";

MediaType JSON = MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();

RequestBody body = RequestBody.create(JSON, processInstanceJson);
Request request = new Request.Builder()
                         .url(url)
                         .post(body)
                         .build();

Response response = client.newCall(request).execute();

  1. DolphinScheduler的node会接收到这些参数,并启动一个新的任务实例。

import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.entity.StringEntity;  
import org.apache.http.impl.client.HttpClientBuilder;  
import org.apache.http.util.EntityUtils;  
  
public class DolphinSchedulerClient {  
    public static void main(String[] args) {  
        String url = "http://your-dolphinscheduler-url/api/projects/{projectCode}/executors/start-process-instance";  
        String projectCode = "your-project-code";  
        String executorId = "your-executor-id";  
        String processDefinitionKey = "your-process-definition-key";  
        String businessKey = "your-business-key";  
        String processInstanceId = "your-process-instance-id";  
        String variables = "{\"var1\":\"value1\",\"var2\":\"value2\"}"; // 传递的变量  
  
        try {  
            HttpClient httpClient = HttpClientBuilder.create().build();  
            HttpPost httpPost = new HttpPost(url);  
            httpPost.addHeader("Content-Type", "application/json");  
            httpPost.setEntity(new StringEntity(variables));  
            HttpResponse httpResponse = httpClient.execute(httpPost);  
            HttpEntity httpEntity = httpResponse.getEntity();  
            String responseBody = EntityUtils.toString(httpEntity);  
            System.out.println(responseBody);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}