One Time即一次性任务调度,配置完成后任务将在设置的时间点执行一次,执行完成后调度平台会自动清理任务,您无需在客户端执行删除任务的操作。一次性任务调度适用于订单超时未支付、自动关闭定时日历提醒等场景。
优势
- 精准时刻:SchedulerX的一次性任务与延时消息相比,没有固定延迟多少时间或者在多少天内的时间限制,支持未来任意时间点,使用简单。
- 丰富的任务类型:SchedulerX一次性任务适用于所有任务类型,例如Java、HTTP、Shell任务。也适用所有分布式模型,例如单机、广播、分片、MapReduce等。
- 可视化运维:SchedulerX的一次性任务和其他任务一样,具有可视化的界面,方便您观测和查询。并且支持在调度时间到达之前修改任务参数,支持失败自动重试等功能。
通过API创建一次性调度任务
- 在应用程序的pom.xml文件中添加OpenAPI的SDK依赖。具体操作,请参见添加SDK依赖。
- 下面以一个示例代码说明如何使用SDK调用API,将timeType的参数值设置为5,表示启用一次性任务调度。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.schedulerx2.model.v20190430.CreateJobRequest;
import com.aliyuncs.schedulerx2.model.v20190430.CreateJobResponse;
public class CreateJavaJob {
public static void main(String[] args) throws Exception {
// OpenAPI的接入点,可查看产品支持的地域列表或根据购买产品的地域填写
String regionId = "public";
//鉴权使用的AccessKey ID,由阿里云官网控制台获取
String accessKeyId = "xxxxxxxx";
//鉴权使用的AccessKey Secret,由阿里云官网控制台获取
String accessKeySecret = "xxxxxxxxx";
//产品名称
String productName ="schedulerx2";
//对照支持地域列表选择Domain填写
String domain ="schedulerx.aliyuncs.com";
//构建OpenAPI客户端
DefaultProfile.addEndpoint(regionId, productName, domain);
DefaultProfile defaultProfile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
CreateJobRequest request = new CreateJobRequest();
request.setJobType("java");
request.setExecuteMode("standalone");
request.setDescription("test");
request.setName("一次性任务测试");
request.setClassName("com.alibaba.schedulerx.test.processor.HelloWorldJob3");
//timeType=5表示一次性任务
request.setTimeType(5);
//yyyy-MM-dd HH:mm:ss
request.setTimeExpression("2021-12-15 12:11:00");
request.setNamespace("433d8b23-06e9-408c-aaaa-90d4d1b9a4af");
request.setGroupId("xueren_sub");
// 监控报警
request.setTimeoutEnable(true);
request.setTimeoutKillEnable(true);
request.setFailEnable(true);
request.setTimeout(12300L);
// 高级配置,配置失败自动重试
request.setMaxAttempt(3);
request.setAttemptInterval(30);
CreateJobResponse response = client.getAcsResponse(request);
if (response.getSuccess()) {
System.out.println("jobId=" + response.getData().getJobId());
} else {
System.out.println(response.getMessage());
}
}
}
- API新建任务后,登录控制台查看任务。
- 登录分布式任务调度平台。
- 在左侧导航栏单击应用管理。