在Actframework的应用当中进行任务调度的方式是使用任务调度注解标记任务方法。 ActFramework支持的任务调度注解包括:
@AlongWith
- 指定该方法与某个任务一同执行(异步)@Cron
- 使用类unix的cron表达式来调度执行该方法@Every
- 定期执行该方法@FixedDelay
- 固定间隔执行该方法@InvokeAfter
- 指定该方法在某个任务之后执行(同步)@InvokeBefore
- 指定该方法在某个任务之前执行(同步)@OnAppEvent
- 指定当某个AppEvent
触发时执行该方法@OnAppStart
- 当App启动时执行该方法@OnAppStop
- 当App停止时执行该方法任务方法的要求:
任务方法可以是静态的也可以是虚函数。当任务方法不是静态方法的时候,声明方法的类不能是抽象类。任务方法示例:
ActFramework是能够进行水平扩容的。假设我们有多台服务器运行同样的ActFramework应用,任务调度势必发生冲突。Act提供了一种巧妙的解决办法。在启动应用的时候可以使用-Dapp.nodeGroup=xxx
参数来指定当前应用节点的group
,比如-Dapp.nodeGroup=job
, 然后在任务方法上使用Env.Group("job")
来指定这个方法只能在指定为job
group的应用节点上运行:
/**
* This method will get called every x, where
* `x` is configured through `every.check_status`
* configuration
*/
@Every(value = "every.check_status", id = "CHECK_STATUS")
@Env.Group("job")
public void checkStatus() {
JobLog.log("SomeService.checkStatus");
}
这是一种简单易用的处理多应用服务任务调度冲突的办法
需要进一步了解ActFramework的任务调度可以试试运行调试任务调度演示项目: