二、分布式任务调度 —— 阿里调度
1、搭建zookeeper集群。
1.1、从 http://zookeeper.apache.org/releases.html#download下载最新的稳定版本3.4.6
1.2、根据说明启动Zookeeper,并测试是否正常启动
2、搭建tbschedule控制台
2.1、从http://code.taobao.org/svn/tbschedule/trunk 下载schedule的所有代码和文档
2.2、修改src/test/resources/schedule.xml中的配置信息指向已经启动的zookeeper服务器。为了避免不同应用任务类型间冲突,rootPath尽量全局唯一
<bean id="scheduleManagerFactory" class="com.taobao.pamirs.schedule.TBScheduleManagerFactory"
init-method="init">
<property name="zkConfig">
<map>
<entry key="zkConnectString" value="your_ip:2181" />
<entry key="rootPath" value="/your_app/app1" />
<entry key="zkSessionTimeout" value="3000" />
<entry key="userName" value="userName" />
<entry key="password" value="password" />
</map>
</property>
</bean>
2.3、配置Web服务器: 将console\ScheduleConsole.war拷贝到你自己的Web服务器中运行即可.因为没有做仔细的兼容性测试,建议使用IE82.4 、启动浏览器 http://localhost/index.jsp?manager=true 通过Console来检查配置数据是否正确:
第一次运行的时候,会要求你输入zookeeper的相关配置信息
3 如何将自己的应用接入到tbschedule中
3.1 添加zookeeper依赖
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>
3.2 添加tbschedule依赖
<dependency> <groupId>com.taobao.pamirs.schedule</groupId> <artifactId>tbschedule</artifactId> <version>3.2.18</version> </dependency>
3.3 将应用的bean列表加载到tbscheduleManagerFactory
3.3.1 加载zk连接配置
3.3.2 新建ScheduleInitUtil 类,并实现 InitializingBean, ApplicationContextAware
3.3.3 将bean列表加载至tbscheduleManagerFactory
public void afterPropertiesSet() throws Exception {
Properties p = getProperties(configInfo);
tbscheduleManagerFactory = new TBScheduleManagerFactory();
tbscheduleManagerFactory.setApplicationContext(applicationcontext);
tbscheduleManagerFactory.init(p);
tbscheduleManagerFactory.setZkConfig(convert(p));
logger.warn("TBBPM 成功启动schedule调度引擎 ...");
}
3.4 实现自己应用的任务 示例:
@Component("demoTaskBean")
public class DemoTaskBean extends IScheduleTaskDealSingle<SubDetailDO>{
/*实现自己的业务查询*/
public List<SubDetailDO> selectTasks(String taskParameter, String ownSign,
int taskItemNum, List<TaskItemDefine> taskItemList,
int eachFetchDataNum) throws Exception {
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int day = calendar.get(Calendar.DAY_OF_MONTH);
List<SubDetailDO> details = null;
details = subDetailDAO.selectForSchedule(
getScopeByQueueCondition(taskItemNum, taskItemList),
confirmTypes, DETAIL_STATUS_ONE, eachFetchDataNum);
return details;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw e;
}
}
/*处理自己的业务*/
public boolean execute(SubDetailDO subDetail, String ownSign)
throws Exception {
try {
yourProcess.process(subDetail);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
3.5 向zookeeper添加配置调度任务数据,或者通过控制台添加任务和调度策略
---添加调度策略---
3.6、启动调度服务器。如果看到类似日志信息,则表示成功:
[2012-01-30 16:50:33,098] [DemoTask$PRE-2-exe0] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[PRE]:39971971893 [2012-01-30 16:50:33,098] [DemoTask-0-exe0] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[BASE]:79970840269 [2012-01-30 16:50:33,098] [DemoTask$PRE-3-exe1] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[PRE]:49993262139 [2012-01-30 16:50:33,114] [DemoTask$TEST-4-exe0] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[TEST]:59954542534 [2012-01-30 16:50:33,114] [DemoTask$TEST-5-exe1] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[TEST]:70033832131 [2012-01-30 16:50:33,114] [DemoTask-1-exe1] (DemoTaskBean.java:58) INFO com.taobao.pamirs.schedule.test.DemoTaskBean - 处理任务[BASE]:90016724177
9、在Console中检查服务器运行情况:
更多推荐



所有评论(0)