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



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

我的问题是,在 Netflix Conductor 中,如何定义和创建任务或工作流任务,最重要的是,将微服务链接到它?以下是来自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 指挥家的新手。

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

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

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

  1. 实现您自己的工作流系统任务
  2. 重写 start()/execute() 方法来调用微服务
  3. 根据 https://netflix.github.io/conductor/intro/concepts/#worker-taks 将任务类型设置为简单
  1. 定义工作线程类的任务客户端 Bean 和覆盖执行方法。
  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 中创建 SIMPLE 任务(使用 API 端点,这些参数 https://conductor.netflix.com/configuration/taskdef.html。

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

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

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

最后 - 现在有一个免费的云游乐场供 Netflix 售票员在 https://play.orkes.io

相关内容

  • 没有找到相关文章

最新更新