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中检查服务器运行情况: