如何在 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层源码分析