Quartz + Terracotta集成
Quartz與Terracotta的集成
? 綜述
? 配置模塊
? 支持的功能
? 與基于數據庫的Quartz集群的對比
? 公開源代碼庫
? 內部源代碼庫(為代碼提交者使用)
綜述
Quartz是開源Java任務調度系統,它可以與幾乎所有的J2EE或者J2SE應用整合在一起使用。Quartz可以用來調度執行幾十、成百甚至上萬個任務。任務里面的具體工作則可以用標準的Java空間或者EJB構成。
Quartz 和Terracotta的整合使得Quartz可以基于RAMJobStore來構建集群。與現有的JobStoreTx或者JboStoreCMT等基于數據庫的Quartz集群相比,Terracotta實現的基于RAMJobStore的集群具有更高的效率和易用性。
配置模塊
最快、最簡單配置Quartz集群的方式就是在您Terracotta XML配置文件中包含Quartz配置模塊。只需要從Terracotta Forge中下載如下Quartz相關的jar包,并且把它加到配置文件中:
Code:
- <clients>
- <modules>
- <repository>./modules</repository>
- <module name="tim-quartz-1.5.1" version="1.2.0"/>
- </modules>
- </clients>
* 模塊位置
要注意確認模塊放置在正確的位置。模塊位置是在<repository>元素中配制的。最簡單的辦法是把模塊的jar包拷貝到TC_INSTALL_DIR/modules目錄下,這樣您就不需要配置<repository>了。如果您要把模塊放在自定義的位置,就一定要配置<repository>。
比如上面的配置文件就假定模塊放在當前目錄的modules子目錄下。
* 模塊名
注意模塊的jar文件名和配置文件中的模塊名有相關性。jar文件名一定要符合 <模塊名>-<版本>的格式。
有關模塊配置的詳細信息可以參考:
http://www.terracotta.org/web/display/docs/Configuration+Guide+and+Reference#ConfigurationGuideandReference-configmodules
支持的功能
1. 在Terracotta中使用tim-quartz,提供了一個Quartz RAMNJobStore的集群話的版本。
2. 調度任務的執行負載被均衡分配到整個集群中:集群中每一個調度器(Scheduler)都視圖根據調度器的權限觸發調度任務觸發器(trigger)。所有的調度器實例都爭搶觸發調度任務的權利。當一個任務被觸發以后,其它的調度器在下次調度時間到來之前,就不能觸發相同的觸發器了。
3. 從失敗的調度器實例中回復:當調度器實例出現故障時,Terracotta能夠自動檢測到故障,并且將自動恢復任務,使得它能夠被其它的調度器在他們下一次執行時間得到執行。
4. 任務和觸發器信息在節點發生故障時不會丟失:如果Terracotta服務器配置為持久化模式(persistent mode),這些信息將在服務器啟動過程部得以保留。比如:A任務在一個節點上被激活,當當前節點宕機或者死機的時候,它可以在其它節點上繼續執行。
5. 被恢復的任務立即被執行。如果他們的調度器出現故障,他們將在集群中其它調度器上被立即執行。
與基于數據庫的Quartz集群的對比
1. 與基于數據庫的JobStoreTx或JobStoreCMT實現的Quartz集群相比較,Terracotta基于內存的實現執行起來會快很多。Terracotta基于字段的數據變化處理使得任務和觸發器的修改速度超快。
2. 簡單易用。不需要任何數據庫的安裝配置。
3. 失敗的任務可以立即被恢復。而基于數據庫的實現則需要在制定的時間間隔內對調度器作檢查才能完成恢復。
4. 不需要JGroups或者其它集群配置。
公共源代碼庫
SVN: http://svn.terracotta.org/svn/forge/projects/tim-quartz
內部源代碼庫(為代碼提交者使用)
SVN: https://svn.terracotta.org/svn/forge/projects/tim-quartz