qschedule client
来源:互联网 发布:剑灵召唤师卡刀软件 编辑:程序博客网 时间:2024/05/22 12:36
如何使用
1.环境配置
在pom文件中引入qschedule包依赖
spring工程
<properties><qschedule.version>最新版本</qschedule.version></properties><dependency><groupId>qunar.tc.qschedule</groupId><artifactId>qschedule-client</artifactId><version>${qschedule.version}</version></dependency>
非spring工程
<properties><qschedule.version>最新版本</qschedule.version></properties><dependency><groupId>qunar.tc.qschedule</groupId><artifactId>qschedule-executor</artifactId><version>${qschedule.version}</version></dependency>
2.注册application
升级到1.0.2版本解决方案
1.升级common-core到8.1.8,qschedule-client到1.0.2,qmq-client 和 qmq-api 到1.3.4
2.在应用中心注册应用,将应用中心生成的qunar-app.properties文件替换以前的quanr-app.properties文件。
使用qschedule 1.0.2及以上版本
从qschedule 1.0.2版本开始,业务方需在应用中心注册应用。
步骤如下:
#organization=tcdev#owner=[zhaohui.yu]#developer=[kelly.li]#mailGroup=[tcdev]name=tc_qschedule_demotoken=KKsoGndpNHdyJoIAvRRxhlzRAdi8/RHEM9cDZE0q+zr6cN1jQf3OuC0/+pzw8CctmHCNzvwIkyoaY//KEvVaq8WBezrtHMSs9KoWXTy4h4ckQjloun0EH54s6CVnWndj8d+zf+A4f9wni3sHEzXVEKnNaHSX1u8uSwSR+ExvU1s=
使用qschedule 1.0.1及以下版本
在src/main/resources文件夹下创建quanr-app.properties并配置organization、application和owner的值。
以下是demo,仅作参考,属性值不要照抄
organization=tcdevapplication=qschedule_demoowner=kelly.li
3.配置myid
在各profile文件夹下创建myid并配置环境标识名,一般用于dev和beta
dev
betaa
betab
4.编写job
非spring工程
定义job,实现worker接口的doWork方法
public interface Worker { void doWork(Parameter parameter);}
simple demo
public class MyJob implements Worker { @Override public void doWork(Parameter parameter) { }}
使用ScheduleProvider注册job
构造SchedulerProvider,registryURL为job注册的zk地址public SchedulerProvider(String registryURL)初始化public void init()注册任务,每个任务都独立线程池void schedule(final String jobName, final Worker worker)注册任务,多个任务共享线程池void schedule(final String jobName, final Worker worker, final ThreadPoolExecutor executor)销毁public void destroy()
simple demo
SchedulerProvider schedulerProvider = new SchedulerProvider(registryURL);schedulerProvider.init();schedulerProvider.schedule("qschedule.demo.job", new MyJob());schedulerProvider.destroy();
spring工程xml配置
定义job,不需要强制实现Worker接口。
定义doWork方法,方法名任意,可以不带参数。
public class MyJob{ public void doWork(Parameter parameter) { }}
在spring文件中配置<qschedule:config>标签,设置address和port属性。port属性可省略默认值为20070。此标签等价于创建了ScheduleProvider实例。
在spring文件中配置<qschedule:task>标签,设置id、ref、method属性。id为job的名字,全局唯一。此标签等价于ScheduleProvider的schedule方法。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qschedule="http://www.qunar.com/schema/qschedule"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.qunar.com/schema/qschedule http://www.qunar.com/schema/qschedule/qschedule.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:property-placeholder location="classpath:qschedule.properties" ignore-unresolvable="true" /><qschedule:config address="${registry.address}" port="${registry.port}" /> <bean id="myJob" class="qunar.tc.share.qschedule.job.MyJob" /><qschedule:task id="qschedule.demo.myjob" ref="myJob" method="doWork" /></beans>
spring工程annotation配置
定义job,不需要强制实现Worker接口。
定义doWork方法,方法名任意,可以不带参数。
在doWork方法上配置注解 @QSchedule,此注解等价于ScheduleProvider的schedule方法。
@Componentpublic class MyJob{ @QSchedule("qschedule.demo.myjob") public void doWork(Parameter parameter) { }}
在spring文件中配置<qschedule:config>标签,设置address和port属性。port属性可省略默认值为20070。此标签等价于创建了ScheduleProvider实例。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qschedule="http://www.qunar.com/schema/qschedule"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.qunar.com/schema/qschedule http://www.qunar.com/schema/qschedule/qschedule.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:property-placeholder location="classpath:qschedule.properties" ignore-unresolvable="true" /><context:component-scan base-package="qunar.tc.share.qschedule" /><qschedule:config address="${registry.address}" port="${registry.port}"/></beans>
任务跟踪
使用该日志对象写的日志会收集到调度中心Logger getLogger();设置总工作规划,用于外部进度跟踪。void setRateCapacity( int capacity);增加进度void addRate( int delta);设置当前进度void setRate( int rate);
simple demo
@Componentpublic class ProcessWorker { @QSchedule("qschedule.demo.process") public void doWork(Parameter parameter) { TaskMonitor monitor = TaskHolder.getKeeper(); Logger logger = monitor.getLogger(); //向qshedule输出日志 logger.info("work begin"); int size = getDataSize(); //设置任务容量 monitor.setRateCapacity(size); for (int i = 0; i < size; i++) { processData(i, logger); //增加任务进度 monitor.addRate(1); //设置任务进度 monitor.setRate(i+1); } logger.error("work finish"); } public int getDataSize() { return 100; } public void processData(int i, Logger logger) { logger.info("process data {}", i); }}
异步任务
设置是否自动ackvoid autoAck( boolean ack);任务完成void finish();任务失败void fail(Throwable e);
simple code
@Componentpublic class AsyncWorker { @QSchedule(value = "qschedule.demo.async") public void doWorker() { // 要注意,这个一定要在执行任务的入口方法里调用,如果别的地方要用则传递过去 final TaskMonitor monitor = TaskHolder.getKeeper(); // 关闭自动报告任务完成 monitor.autoAck(false); new Thread(new Runnable() { @Override public void run() { // 开启一个新线程处理 try{ // 处理任务 // 任务处理完毕,汇报 monitor.finish(); }catch(Exception e){ // 如果任务处理过程中出现异常,则调用 monitor.fail(e); monitor.fail(e); } } }).start(); }}
获得参数
获得job名称String getJobName();获得任务创建时间Date getCreatedDate();获得字符串型参数值String getString(String name);获得参数值<T> T getProperty(String name, Class<T> clazz);
simple demo
@Componentpublic class ParamWorker { @QSchedule(value = "qschedule.demo.param") public void doWorker(Parameter parameter) { TaskMonitor monitor = TaskHolder.getKeeper(); Logger logger = monitor.getLogger(); logger.info("jobName : {} ", parameter.getJobName()); logger.info("task create date : {} ", parameter.getCreatedDate()); logger.info("string param:{}", parameter.getString("str")); logger.info("number param:{}", parameter.getProperty("num", Integer.class)); logger.info("date param:{}", parameter.getProperty("date", Date.class)); }}
- qschedule client
- qschedule client
- qschedule
- Qschedule
- qschedule manager
- qschedule server
- qschedule manager
- qschedule server
- qschedule http interface
- qschedule http interface(new)
- qschedule http interface
- client
- client
- Client
- Client
- Client
- Client
- client
- Delaunay三角剖分算法
- ISP相关
- 使用centos 5.x 32位系统安装astgo 2014 v7.0教程(含全套安装文件)
- HTML5基础(二)零基础入门
- 第三章:spring mvc DispatcherServlet
- qschedule client
- linux快速删除大量小文件
- Android之——ContentResolver查询的三种方式
- 选择模型
- 腾讯十天Vue.js课程之三:增删便签任务
- iOS 本地通知基本使用
- bzoj1043: [HAOI2008]下落的圆盘
- WPF实战之引用DynamicDataDisplay插件的过程
- TCP协议三次握手和四次挥手