One Time即一次性任务调度,配置完成后任务将在设置的时间点执行一次,执行完成后调度平台会自动清理任务,您无需在客户端执行删除任务的操作。一次性任务调度适用于订单超时未支付、自动关闭定时日历提醒等场景。本文介绍如何通过API创建一次性调度任务。
优势
精准时刻:SchedulerX的一次性任务与延时消息相比,没有固定延迟多少时间或者在多少天内的时间限制,支持未来任意时间点,使用简单。
丰富的任务类型:SchedulerX一次性任务适用于所有任务类型,例如Java、HTTP、Shell任务。也适用所有分布式模型,例如单机、广播、分片、MapReduce等。
可视化运维:SchedulerX的一次性任务和其他任务一样,具有可视化的界面,方便您观测和查询。并且支持在调度时间到达之前修改任务参数,支持失败自动重试等功能。
通过API创建一次性调度任务
在应用程序的pom.xml文件中添加OpenAPI的SDK依赖。
下面以一个示例代码说明如何使用SDK调用API,将timeType的参数值设置为5,表示启用一次性任务调度。
说明关于如何配置环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,请参见配置方案。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"; /** * 1.阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 * 2.建议不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 * 3.本实例以读取环境变量方式加载AK/SK信息实现身份验证,需提前配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET, * 用户可自行采用其他安全加密方式存储身份信息。 */ String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); //产品名称 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新建任务后,登录控制台查看任务。
登录分布式任务调度平台。
在左侧导航栏单击应用管理。