Netfiex Conductorインストール入門ガイドおよびmysqlデータソースへの切り替え
public interface Configuration {
String DB_PROPERTY_NAME = "db";
// mysql
String DB_DEFAULT_VALUE = "mysql";
}
public interface MySQLConfiguration extends Configuration {
String JDBC_URL_PROPERTY_NAME = "jdbc.url";
//
String JDBC_URL_DEFAULT_VALUE = "jdbc:mysql://localhost:3306/conductor?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
//
String JDBC_USER_NAME_PROPERTY_NAME = "jdbc.username";
String JDBC_USER_NAME_DEFAULT_VALUE = "root";
//
String JDBC_PASSWORD_PROPERTY_NAME = "jdbc.password";
String JDBC_PASSWORD_DEFAULT_VALUE = "11111111";
String FLYWAY_ENABLED_PROPERTY_NAME = "flyway.enabled";
boolean FLYWAY_ENABLED_DEFAULT_VALUE = true;
String FLYWAY_TABLE_PROPERTY_NAME = "flyway.table";
Optional FLYWAY_TABLE_DEFAULT_VALUE = Optional.empty();
// The defaults are currently in line with the HikariConfig defaults, which are unfortunately private.
// max,min
String CONNECTION_POOL_MAX_SIZE_PROPERTY_NAME = "conductor.mysql.connection.pool.size.max";
int CONNECTION_POOL_MAX_SIZE_DEFAULT_VALUE = 10;
String CONNECTION_POOL_MINIMUM_IDLE_PROPERTY_NAME = "conductor.mysql.connection.pool.idle.min";
int CONNECTION_POOL_MINIMUM_IDLE_DEFAULT_VALUE = 3;
} 最初のtaskの作成を開始し、2つのtaskを定義します.
[
{
"name": "mytask1",
"retryCount": 3,
"timeoutSeconds": 1200,
"inputKeys": [
"ai1",
"ai2"
],
"outputKeys": [
"ao1",
"ao2"
],
"timeoutPolicy": "TIME_OUT_WF",
"retryLogic": "FIXED",
"retryDelaySeconds": 600,
"responseTimeoutSeconds": 3600
},
{
"name": "mytask2",
"retryCount": 3,
"timeoutSeconds": 1200,
"inputKeys": [
"bi1",
"bi2"
],
"outputKeys": [
"bo1",
"bo2"
],
"timeoutPolicy": "TIME_OUT_WF",
"retryLogic": "FIXED",
"retryDelaySeconds": 600,
"responseTimeoutSeconds": 3600
}
]
[外部リンク画像の転送失敗(img-Ck 8 VFGwd-1564998901563)](https://i.imgur.com/JBuFtKh.png)]最初のプロセスファイルの作成を開始
[
{
"name": "myworkflow1",
"description": "my workflow for test",
"version": 1,
"tasks": [
{
"name": "mytask1",
"taskReferenceName": "node1",
"type": "SIMPLE",
"inputParameters": {
"ai1": "${workflow.input.wi1}",
"ai2": "${workflow.input.wi2}"
}
},
{
"name": "mytask2",
"taskReferenceName": "node2",
"type": "SIMPLE",
"inputParameters": {
"bi1": "${node1.output.ao1}",
"bi2": "${node1.output.ao2}"
}
}
],
"outputParameters": {
"ao1": "${node1.output.ao1}",
"ao2": "${node1.output.ao2}",
"bo1": "${node2.output.bo1}",
"bo2": "${node2.output.bo2}"
},
"schemaVersion": 2
}
]
[外部リンク画像の転送失敗(img-wOELVDD-1564998901563)](https://i.imgur.com/jjSPrp0.png)]
ワークコードを作成してタスクを実行
package com.zd.demo;
import com.netflix.conductor.client.http.TaskClient;
import com.netflix.conductor.client.task.WorkflowTaskCoordinator;
import com.netflix.conductor.client.worker.Worker;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
TaskClient taskClient = new TaskClient();
taskClient.setRootURI("http://localhost:8080/api/"); //Point this to the server API
int threadCount = 2; //number of threads used to execute workers. To avoid starvation, should be same or more than number of workers
Worker worker1 = new SampleWorker("mytask1");
Worker worker2 = new SampleWorker2("mytask2");
//Create WorkflowTaskCoordinator
WorkflowTaskCoordinator.Builder builder = new WorkflowTaskCoordinator.Builder();
WorkflowTaskCoordinator coordinator = builder.withWorkers(worker1, worker2).withThreadCount(threadCount).withTaskClient(taskClient).build();
coordinator.init();
}
class SampleWorker implements Worker {
private String taskDefName;
public SampleWorker(String taskDefName) {
this.taskDefName = taskDefName;
}
@Override
public String getTaskDefName() {
return taskDefName;
}
@Override
public TaskResult execute(Task task) {
System.out.printf("Executing %s
", taskDefName);
System.out.println("ai1:" + task.getInputData().get("ai1"));
System.out.println("ai2:" + task.getInputData().get("ai2"));
TaskResult result = new TaskResult(task);
result.setStatus(TaskResult.Status.COMPLETED);
//Register the output of the task
result.getOutputData().put("ao1", String.valueOf(task.getInputData().get("ai1")) + " from ai1");
result.getOutputData().put("ao2", String.valueOf(task.getInputData().get("ai2")) + " from ai2");
return result;
}
class SampleWorker2 implements Worker {
private String taskDefName;
public SampleWorker2(String taskDefName) {
this.taskDefName = taskDefName;
}
@Override
public String getTaskDefName() {
return taskDefName;
}
@Override
public TaskResult execute(Task task) {
System.out.printf("Executing %s
", taskDefName);
System.out.println("bi1:" + task.getInputData().get("bi1"));
System.out.println("bi2:" + task.getInputData().get("bi2"));
TaskResult result = new TaskResult(task);
result.setStatus(TaskResult.Status.COMPLETED);
//Register the output of the task
result.getOutputData().put("bo1", String.valueOf(task.getInputData().get("bi1")) + " from bi1");
result.getOutputData().put("bo2", String.valueOf(task.getInputData().get("bi2")) + " from bi2");
return result;
}
}
main関数の実行
Swaggerページを開き、パラメータ({「wi 1」:「param 1」、「wi 2」:「param 2」})を記入し、Try it out![外部リンクピクチャの転送に失敗しました(img-f 2 SshWBS-1564998901563)](https://i.imgur.com/LPNAFvr.png)][外部リンク画像の転送に失敗しました(img-Z 5 DUqzLU-15649998901564)(https://i.imgur.com/pc6NlRt.png)]