Netfiex Conductorインストール入門ガイドおよびmysqlデータソースへの切り替え

7897 ワード

  • gitを介してソースコードをローカルにダウンロード[email protected]:Netflix/conductor.git.
  • Conductorはgradleコンパイルに依存するため、gradle eを2つの方法でインストールすることができる.
  • コマンドgradlew serverで自動的にダウンロードされ、少し遅いのでお勧めしません.
  • インストールパッケージをダウンロードし、環境変数をbinディレクトリの問題に解凍して構成します.

  • データソースが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;
    
    }
  • データソースファイルの変更が完了し、cdはconductorがダウンロードしたソースディレクトリに入り、gradlew build-x testを実行してテスト構築プロジェクトをスキップし、デフォルトの生産パッケージは(/conductor/server/build/libs)に生成されます.
  • パラメータなしでプロジェクトを開始するコマンド:java-jar conductor-server-2.6.0-SNAPSHOT.jar.
  • localhost:8080にアクセスしてページを表示します.[外部リンク画像の転送失敗(img-BcPPMhZV-1564998901561)](https://i.imgur.com/lsJpK2k.png)]
  • はUIページを生成し、uiはnodejs、gulpのプラグインに依存する.
  • nodejsインストールパッケージをダウンロードし、8以上のバージョンが必要です.
  • グローバルインストールgulpコマンド:$npm install--global gulp
  • cdプロジェクトconductor/uiコマンド:$npm install--save-dev gulpプロジェクト依存gulpを生成します.
  • 実行コマンド:gulp watch構築が成功するまで待機し、localhost:3000ページにアクセスしてConductorの管理インタフェースを表示します.[外部リンク画像の転送に失敗しました(img-GzHJTrpf-15449998901562)](https://i.imgur.com/3Zeglyt.png)]
  • データソースをmysql
  • に変更
    最初の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)]