繁体   English   中英

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

[英]How do I register a microservice (or its methods) to Task in Netflix Conductor?

我一直在寻找比 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 的新手。

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

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

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

  1. 实现你自己的WorkflowSystemTask
  2. 覆盖 start() / execute() 方法来调用您的微服务
  3. 根据https://netflix.github.io/conductor/intro/concepts/#worker-taks将任务类型设置为 SIMPLE
  1. 定义一个 Task Client Bean 并覆盖 worker 类的 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;
        }
    }

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

现在有许多 SDK 可以将您的微服务工作者连接到 Conductor: https://github.com/conductor-sdk/

您可以在 Conductor 中创建一个简单的任务(使用 API 端点和这些参数https://conductor.netflix.com/configuration/taskdef.html .

工作人员在 Conductor 中轮询您的任务。 当一项任务作为要运行的工作时,它会将其分配给工作人员。 完成后,任务会将工作人员的结果返回到指挥工作流程。

这是 Go 中的一名工人: https://github.com/conductor-sdk/conductor-examples/tree/main/go-samples

还有一个 Java 示例: https://github.com/orkes-io/orkesworkers

最后 - 现在在https://play.orkes.io有一个免费的 Netflix 指挥云游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM