Quartz教程 第11课 高级(企业级)特性

来源:互联网 发布:淘宝一次破损补寄条款 编辑:程序博客网 时间:2024/06/05 10:48

11课 高级(企业级)特性

11.1 集群

当前的集群需要和JDBCJobstore (JobStoreTXJobStoreCMT)TerracottaJobStore一起工作。这个特定包括负载均衡和job容错(如果JobDetail“请求恢复”标志设置为true的话)

####使能JobStoreTXJobStoreCMT的集群,需要将“org.quartz.jobStore.isClustered”属性设置为true集群中的一个scheduler实例都要使用同一份quartz.properties文件。完全相同的属性文件,可以允许下面的例外:不同的线程池大小,不同的“org.quartz.scheduler.instanceId”属性值。集群中的每一个节点必须具有唯一的instanceId,这很容易实现(不需要不同的属性文件),只需要将这个属性的值设置为AUTO即可。

注意:从来不要在分离的机器上运行集群,除非它们的时钟是同步的,使用一些时间同步服务(守护进程)且运行非常规律(the clocks must be within a second of each other)。如果不知道如何实现,请参见http://www.boulder.nist.gov/timefreq/service/its.htm

从来不要在经被其它实例运行的相同数据表上触发非集群实例。这可能会发生严重数据错误,一定会出现不稳定的行为。

每一次触发,都只有一个节点会触发job。我说的意思是,如果job有一个重复trigger,告诉它每10s触发一次,那么在12:00:00只有一个节点会运行这个job,在12:00:10也只有一个节点会运行这个job,等等。每一次不必是同一个节点:它在哪个节点上运行是随机的。对于忙碌的scheduler(有许多trigger)来说,负载均衡机制几乎是随机的,但是对于不忙碌的scheduler来说,更喜欢用相同的处于active的节点。

####使用TerracottaJobStore的集群,简单配置scheduler使用TerracottaJobStore(第9 JobStore介绍了),你的scheduler都是用于集群的。

你也想要考虑如何设置Terracotta服务器,尤其是打开特性的配置选项,例如持久化,运行一组Terracotta服务器以实现HA

TerracottaJobStore的企业级版本提供了高级的Quartz Where特性,它允许智能的将job定向到合适的集群节点上。

关于JobStoreTerracotta的更多信息,请访问http://www.terracotta.org/quartz

11.2 JTA事务

如第9 JobStore介绍的,JobStoreCMT允许Quartz在更大的JTA事务中执行调度操作。

Jobs要想在JTA事务中执行(UserTransaction),要将属性“org.quartz.scheduler.wrapJobExecutionInUserTransaction”设置为true。如果设置了这个属性,在调用Jobexecute方法之前,JTA事务会调用begin()方法,在execute结束之后会才调用commit()方法,适用于所有的Job

如果你想要指定job是否让JTA事务包装它的执行,那么你应该在Job类上使用@ExecuteInJTATransaction注解。

除了Quartz会自动将Job执行包装到事务中,当使用JobStoreCMT时,Scheduler接口上的调用也会参与到事务中。在调用scheduler的方法之前,要确保已经启动了事务。你可以通过使用UserTransaction直接启动,或者将你的代码放到使用容器托管事务的SessionBean中。

 


阅读全文
0 0
原创粉丝点击