conductor的代码实现很简单。启动后将worker注册到server,并定时从server获得worker的task,并在本地执行。
WorkflowTaskCoordinate通过内部的Build类进行初始化。Build除了承载参数,提供流式操作,创建WorkflowTaskCoordinate外,没有任何其他作用。
WorkflowTaskCoordinate会初始化两个线程池:ExecutorService和ScheduledExecutorService。ExecutorService是当有任务时,执行任务的线程池。
ScheduledExecutorService是定期从Server获得任务的线程池。间隔默认为1s。每次执行后返回结果,worker都返回自己本地的环境参数。所以还以worker的实例为主键,缓存了本地执行环境的描述信息。
Worker的名字,就是task的类型,对应Server中Task的描述信息。
Worker中使用了Eureka。但是查看代码的过程中发现,Worker并没有使用Eureka的特性。唯一用的地方是,在poll task之前,先判断server的实例是否存在。但是此判断需要在用户设置了EurekaClient时才会生效。所以总的来说,并没有用到Eureka。也可能是Netflix希望用户自己编写这部分的逻辑,让worker充分使用微服务的特性。
时序图