如何在Netflix Conductor中将微服务(或其方法)注册到Task?

时间:2017-01-27 21:33:02

标签: microservices netflix amazon-swf axon netflix-conductor

我正在寻找比AxonFramework中的Saga更复杂的工作流程 - 我们目前正在使用它 - 我在Netflix Conductor中找到了一个。 可悲的是,我在互联网上搜索了一个不错的例子,但无济于事。

我的问题是,在Netflix Conductor中,如何定义和创建Task或WorkflowTask,最重要的是,将微服务链接到它?这是来自github的Netflix指挥代码:

    WorkflowDef def = new WorkflowDef();
    def.setName("test");
    WorkflowTask t0 = new WorkflowTask();
    t0.setName("t0");
    t0.setType(Type.SIMPLE);
    t0.setTaskReferenceName("t0");

    WorkflowTask t1 = new WorkflowTask();
    t1.setName("t1");
    t1.setType(Type.SIMPLE);
    t1.setTaskReferenceName("t1");

    def.getTasks().add(t0);
    def.getTasks().add(t1);

原谅我的困惑,因为我是Netflix Conductor的新手。

3 个答案:

答案 0 :(得分:2)

假设Micro服务在HTTP上有一个REST端点。在这种情况下,您必须使用HttpTask这是一项系统任务。 Httptask进行Http调用,响应可用作任务输出。请参阅以下链接:HttpTask

请记住将SchemaVersion设置为包含HttpTask的WorkflowDef的2。您还需要注册相应的Task type

答案 1 :(得分:0)

(免责声明:我没试过,我只看文件......)

  1. 实施您自己的WorkflowSystemTask
  2. 覆盖start()/ execute()方法以调用您的微服务
  3. 根据https://netflix.github.io/conductor/intro/concepts/#worker-taks
  4. 将任务类型设置为SIMPLE

答案 2 :(得分:0)

  1. 定义一个Task Client Bean并执行worker类的遍历执行方法。
  2. 将Task客户端和工作程序bean传递给TaskRunnerConfigurer
    @Configuration
    public class Configuration {
        @Bean
        public TaskClient taskClient(@Value("${conductor url}") String conductorServerURL) {
            TaskClient taskClient = new TaskClient();
            taskClient.setRootURI(conductorServerURL);
            return taskClient;
        }

        @Bean
        public TaskRunnerConfigurer taskRunnerConfigurer(
                @Autowired final TaskClient taskClient,
                @Autowired final List<Worker> workers) {
            final TaskRunnerConfigurer taskRunnerConfigurer = new TaskRunnerConfigurer.Builder(taskClient, workers)
                    .withThreadCount(3)
                    .build();


            taskRunnerConfigurer.init();

            return taskRunnerConfigurer;
        }
    }

此工作人员将轮询指挥服务器的任务