(翻译)Quartz官方教程——第十一课:高级(企业)功能

集群

目前集群可以运行在JDBC-Jobstore (JobStoreTX o或者JobStoreCMT) 和TerracottaJobStore中。集群的特性包括负载均衡和故障转移(如果JobDetail的“request recovery”标识被设置为true)。

####通过设置“org.quartz.jobStore.isClustered”属性为true,就可以在JobStoreTX 或者 JobStoreCMT中开启集群模式。集群中的每个实例都需要使用相同的quartz.properties配置文件。在这些配置文件中有几个可以不同的属性:线程池的大小以及 “org.quartz.scheduler.instanceId”的值。集群中的每个节点都必须有一个唯一的实例ID,通过将这个属性设置为“AUTO”可以很容易的完成这件事情(而不需要频繁修改配置文件)。

永远不要在不同的机器上运行集群模式,除非它们的时钟通过某种时间同步服务(守护进程)进行同步(且相互之间的误差不能超过一秒钟)。如果您不熟悉如何操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm。

在已经有运行中实例相关联的表上不要再运行新的非集群实例。否则你的数据可能会收到严重的破坏,并且会遇到不稳定的运行结果。

每次触发只有一个节点会运行该任务。 我的意思是,如果作业有一个重复的触发器,每隔10秒触发一次,那么在12:00:00,恰好有一个节点将运行该任务,并且在12:00:10,同样只有一个节点将运行......它不一定每次都是同一节点 —— 它或多或少会随机运行它。负载均衡机制对于繁忙的调度器(正在执行多个任务)会近似随机的选择,但是对于活跃的非繁忙的调度器(只有一两个触发)会分配更多的任务。

#### 使用TerracottaJobStore进行集群只需将调度程序配置为使用TerracottaJobStore(第9课:JobStores中介绍),并且您的调度程序将全部设置为集群。

您可能还想考虑如何设置您的Terracotta服务器,特别是打开诸如持久性等功能的配置选项,以及运行一系列用于HA的Terracotta服务器。

TerracottaJobStore的企业版提供了先进的Quartz Where功能,可以将作业智能地定位到适当的集群节点。

有关此JobStore和Terracotta的更多信息,请访问http://www.terracotta.org/quartz

JTA事务

如第9课:JobStores所述,JobStoreCMT允许Quartz调度操作在较大的JTA事务中执行。

通过将“org.quartz.scheduler.wrapJobExecutionInUserTransaction”属性设置为“true”,作业也可以在JTA事务(UserTransaction)中执行。通过设置此选项,JTA事务将在任务的execute()方法被调用之前开启,并紧接着执行调用终止后提交。这适用于所有任务。

如果你只想让单个作业被事务包装运行,那么你只需要在任务类上使用@ExecuteInJTATransaction注释。

除了Quartz会将你的任务自动包裹在事务中,在使用JobStoreCMT时,你通过Scheduler接口进行的调用也会参与事务。在调用Scheduler的方法之前,确保你已经开始了一个事务。您可以通过使用UserTransaction直接执行此操作,也可以将使用调度程序的代码放入使用容器管理事务的SessionBean中。

猜你喜欢

转载自my.oschina.net/icebergxty/blog/1799552
今日推荐