conductor
一、首先从git上检出项目
这个https://github.com/Netflix/conductor是项目的github地址,
选择SSH或者HTTPs检出,git clone [email protected]:Netflix/conductor.git(执行git命令需要先安装git)至任意位置。
二、启动本地服务
进入项目目录下,右键git bash here,执行命令cd server进入server目录,再执行../gradlew server,然后等待项目构建成功即可。注意:此处JDK版本必须为1.8否则会报错:无效的源发行版: 1.8。启动成功后会创建一个kitchen workflow样例:
此时可以打开http://localhost:8080/查看swagger APIs。
重新打开一个git命令窗口,执行cd ui,进入ui目录,执行gulp watch等待构建成功即可。注意:需要执行gulp命令,首先需要安装node.js,并且由于框架使用了import,node.js版本必须使用8.0以上,node装好后再安装glup。顺序应该为:安装node.js->全局安装gulp->项目安装gulp。
成功后可打开http://localhost:3000查看任务相关,如下图:
运行时模型:
Conductor 遵循RPC的通讯模型,其中workers运行在与 服务器分离的应用机器上,并通过HTTP协议或者是轮询的方式来管理work队列。
1.Workers作为远程系统,通过http协议(或者任意支持的RPC机制)同Conductor 服务进行通信。
2.任务队列用于为workers安排任务,Conductor使用内部的dyno-queues 作为任务队列,当然也可以使用其他SQS(简单队列)或者pub-sub机制的队列作为代替。
3.conductor-redis-persistence模块使用Dynomite作为存储引擎,以及elasticsearch作为索引的解决方案。
4.对于存储和索引支持不同数据库。
一个新的workflow的注册和执行需要以下步骤:
1.定义这个workflow需要的task
2.创建workflow。
3.创建消费这些任务的workers并通过轮询的方式来获取任务。
4.触发工作流执行:
POST /workflow/{name}{
... //json payload as workflow input
}
5.轮询获取任务
GET /tasks/poll/BATch/{taskType}
6.更新任务状态
POST /tasks{
"outputData": {
"encodeResult":"success",
"location": "http://cdn.example.com/file/location.png"
//any task specific output
},
"status": "COMPLETED"
}