9

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

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

    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 的新手。

4

3 回答 3

2

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

请记住将包含 HttpTask 的 WorkflowDef 的 SchemaVersion 设置为 2。您还需要注册相应的任务类型

于 2017-06-09T09:12:20.447 回答
0
  1. 定义一个Task Client Bean 并覆盖worker Class 的execute 方法。
  2. 将任务客户端和工作 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;
        }
    }

该工作人员将从指挥服务器轮询任务

于 2020-01-22T01:36:16.163 回答
0

(免责声明:我没有尝试过,我只是查看了文档......)

  1. 实现自己的WorkflowSystemTask
  2. 覆盖 start() / execute() 方法来调用你的微服务
  3. 根据 https://netflix.github.io/conductor/intro/concepts/#worker-taks将任务类型设置为 SIMPLE
于 2017-02-01T20:23:35.327 回答