Quartz高級(企業(yè))功能

2022-06-27 08:58 更新

Clustering

Clustering目前與JDBC-Jobstore(JobStoreTX或JobStoreCMT)和TerracottaJobStore一起使用。功能包括負載平衡和 job故障轉移(如果JobDetail的“請求恢復”標志設置為true)。

使用JobStoreTX或JobStoreCMT進行聚類通過將“org.quartz.jobStore.isClustered”屬性設置為“true”來啟用Clustering。Clustering中的每個實例都應該使用相同的quartz.properties文件。這樣做的例外是使用相同的屬性文件,具有以下允許的異常:不同的線程池大小,以及“org.quartz.scheduler.instanceId”屬性的不同值。Clustering中的每個節(jié)點必須具有唯一的instanceId,通過將“AUTO”作為此屬性的值,可以輕松完成(不需要不同的屬性文件)。

不要在單獨的機器上運行Clustering,除非它們的時鐘使用某種形式的時間同步服務(守護進程)進行同步,而這些時間同步服務(守護進程)運行非常有限(時鐘必須在彼此之間)。 如果您不熟悉如何執(zhí)行此操作, 請參閱http://www.boulder.nist.gov/timefreq/service/its.htm。
不要針對任何其他實例運行的相同的一組表來啟動非群集實例。您可能會收到嚴重的數(shù)據(jù)損壞,一定會遇到不正常的行為。

每次觸發(fā)只能有一個節(jié)點有效。我的意思是,如果job有一個重復的trigger,告訴它每10秒鐘發(fā)射一次,那么在12:00:00,正好一個節(jié)點將運行這個job,在12:00:10,一個節(jié)點將運行job等。它不一定是每次相同的節(jié)點 - 它或多或少是隨機的,哪個節(jié)點運行它。負載平衡機制對于繁忙的調度程序(大量的trigger)來說是近乎隨機的,但是有利于于non-busy(例如一個或兩個trigger)調度程序活動的同一個節(jié)點。

使用TerracottaJobStore進行Clustering簡單地將調度程序配置為使用TerracottaJobStore(第9課:JobStores中介紹),并且您的調度程序將全部設置為Clustering。

您可能還需要考慮如何設置Terracotta服務器,特別是打開諸如持久性等功能的配置選項,以及運行一系列用于HA的Terracotta服務器。

TerracottaJobStore的企業(yè)版提供了高級的Quartz Where功能,允許將作業(yè)的智能定位到適當?shù)腃lustering節(jié)點。

有關此JobStore和Terracotta的更多信息, 請訪問http://www.terracotta.org/quartz

JTA事務

第9課:JobStores所述,JobStoreCMT允許在較大的JTA事務中執(zhí)行Quartz調度操作。

通過將“org.quartz.scheduler.wrapJobExecutionInUserTransaction”屬性設置為“true”,jobs也可以在JTA事務(UserTransaction)內執(zhí)行。使用此選項集,aa JTA事務將在Job的execute方法被調用之前開始(),并且在執(zhí)行調用之后commit()終止。這適用于所有jobs。

如果您希望指定每個jobs是否JTA事務應該包裝其執(zhí)行,那么您應該在jobs類上使用 @ExecuteInJTATransaction注釋。

除了Quartz自動將Job執(zhí)行包裝到JTA事務中,在Scheduler界面上進行的調用也可以在使用JobStoreCMT時參與事務處理。在調用程序調用方法之前,確保已經(jīng)啟動了一個事務。您可以直接通過使用UserTransaction或將使用調度程序的代碼放在使用容器管理事務的SessionBean中來執(zhí)行此操作。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號