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

Posted

技术标签:

【中文标题】如何在 Netflix Conductor 中向 Task 注册微服务(或其方法)?【英文标题】:How do I register a microservice (or its methods) to Task in Netflix Conductor? 【发布时间】:2017-06-13 16:31:43 【问题描述】:

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

我的问题是,在 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 的新手。

【问题讨论】:

【参考方案1】:
    定义一个Task Client Bean并覆盖worker Class的execute方法。 将任务客户端和工作 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;
        
    

这个工人将从指挥服务器轮询任务

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

    实现你自己的WorkflowSystemTask 重写 start() / execute() 方法来调用你的微服务 根据https://netflix.github.io/conductor/intro/concepts/#worker-taks设置任务类型为简单

【讨论】:

以上是关于如何在 Netflix Conductor 中向 Task 注册微服务(或其方法)?的主要内容,如果未能解决你的问题,请参考以下文章

Netflix Conductor源码分析--Client层源码分析

Netflix Conductor源码分析--Client层源码分析

深入浅出Netflix Conductor使用

深入浅出Netflix Conductor使用

深入浅出Netflix Conductor使用

开源微服务编排框架:Netflix Conductor