二、分布式任务调度 —— 阿里调度

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服务器中运行即可.因为没有做仔细的兼容性测试,建议使用IE8

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

11、至此,大功告成。根据自己的需要可以通过Console来维护调度任务和调度策略的配置。

猜你喜欢

转载自blog.csdn.net/xp_zyl/article/details/80078477