调度思路+EurekaServer获得当前机器的instanceid
2016-01-07 00:40
274 查看
调度思路
概念
Build 一次完整的构建 整个流水线
Task(BuidStep) 流水线中的某一个步骤单元
先假设对于一个Build(流水线)而言里面所有Task是串行执行的
并且各Task之间不需要文件共享
前端:
创建一个Build及Build里的所有Task 先持久化,然后将Build的ID发送给调度服务。
调度:
2.调度服务:
构建服务:
问题:
中间出现异常时,可能导致后续的任务也没有执行,或过了很久才被别的条件给触发。
可能需要更多的规则.
如何实现异步持久化数据:
概念
Build 一次完整的构建 整个流水线
Task(BuidStep) 流水线中的某一个步骤单元
先假设对于一个Build(流水线)而言里面所有Task是串行执行的
并且各Task之间不需要文件共享
前端:
创建一个Build及Build里的所有Task 先持久化,然后将Build的ID发送给调度服务。
调度:
2.调度服务:
收到一个Buildid,取出Build信息 查看有没有空闲的机器 有空闲的机器 查看是否有需要执行的Build(先检查传入的Build,如果传入的Build并不需要执行了,则再看有没有其他要执行的Build,此处容易产生竞争): 有要执行的Build: 有要执行的Task: 调用BuildService(发送taskId)执行对应的任务,在Task上记录执行者的id. 没有要执行的任务: 更新Build的状态,回到检查是否有要执行的Build 没有要执行的Build: 什么也不做 没有空闲的机器: 则什么也不做 收到一个taskId,通过taskId取出Build信息,执行与收到Build相同的逻辑。
构建服务:
收到一个taskId 将这个task标记为正在执行的状态,如果发现这个task已经被别人执行,则什么也不用做. 执行这个任务 将自己标记为忙的状态 任务执行完毕后异步更新任务的状态,并且通知调度服务该taskid执行完毕. 将自己标记为空闲的状态.
问题:
中间出现异常时,可能导致后续的任务也没有执行,或过了很久才被别的条件给触发。
可能需要更多的规则.
如何实现异步持久化数据:
将sheduleBuild的FutureTask保存到容器对象中,使用定时器检查该对象的状态。如果对象为isDone则持久化相关的数据.
DiscoveryManager.getInstance().discoveryClient.instanceInfo.getInstanceId()
相关文章推荐
- Sicily 1129. ISBN
- 程序员要如何学英语?
- android shape使用
- [原]unity3d之http多线程异步资源下载
- hdu3998 最长上升子序列及其个数 dp或dp+最大流
- 浅析利用MetaWeblog接口同步多个博客
- LeetCode: 012- Reverse Linked List
- 5种类型的程序员
- Unity中消息事件的封装与运用
- Web服务启动时自动加载Servlet
- inline函数与普通函数的区别
- 13Java语法回顾之filewriter&&filereader
- 保证数据的完整性
- 笔记
- 小猪的Android入门之路 Day 9 part 1
- [Android Studio]For MAC快捷键及功能记录(持续更新)
- [探测与扫描]仿生学-鹰眼的威力
- 小猪的Android入门之路 Day 8 part 6
- 升级Xcode7之后VVDocumenter-Xcode等插件无法使用的解决办法
- 小猪的Android入门之路 Day 8 part 5