小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

淺析Quartz的集群配置(一)

 昵稱24706 2008-01-03

1 基本信息

摘要:Quartz是一個開源的作業(yè)調(diào)度框架,它完全由java寫成,并設計用于J2SE和J2EE應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執(zhí)行一個作業(yè)而創(chuàng)建簡單的或復雜的調(diào)度。它有很多特征,如:數(shù)據(jù)庫支持,集群,插件,EJB作業(yè)預構(gòu)建,JavaMail及其它,支持cron-like表達式等等。其中集群配置一般比較復雜,那么在Quartz中如何配置它的集群特性呢?

作者:武玉厚

查看本文第二部分:http://gocom./modules/newbb/forumtopic19180_9963_40.htm

2 Quartz的集群配置

  Quartz是一個開源的作業(yè)調(diào)度框架,它完全由java寫成,并設計用于J2SE和J2EE應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執(zhí)行一個作業(yè)而創(chuàng)建簡單的或復雜的調(diào)度。它有很多特征,如:數(shù)據(jù)庫支持,集群,插件,EJB作業(yè)預構(gòu)建,JavaMail及其它,支持cron-like表達式等等。其中集群配置一般比較復雜,那么在Quartz中如何配置它的集群特性呢?

2.1 實現(xiàn)集群的基本原理

  目前Quartz最新版本是1.6.0。Quartz是通過借助關系數(shù)據(jù)庫和JDBC作業(yè)存儲來實現(xiàn)集群管理的。


 
1. 原理

  集群通過故障切換和負載平衡的功能,能給調(diào)度器帶來高可用性和伸縮性。目前集群只能工作在JDBC-Jobstore (JobStoreTX 或者JobStoreCMT)方式下,從本質(zhì)上來說,是使集群上的每一個節(jié)點通過共享同一個數(shù)據(jù)庫來工作的(Quartz通過啟動兩個維護線程來維護數(shù)據(jù)庫狀態(tài)實現(xiàn)集群管理,一個是檢測節(jié)點狀態(tài)線程,一個是恢復任務線程)。

  負載平衡是自動完成的,集群的每個節(jié)點會盡快觸發(fā)任務。當一個觸發(fā)器的觸發(fā)時間到達時,第一個節(jié)點將會獲得任務(通過鎖定),成為執(zhí)行任務的節(jié)點。

  故障切換的發(fā)生是在當一個節(jié)點正在執(zhí)行一個或者多個任務失敗的時候。當一個節(jié)點失敗了,其他的節(jié)點會檢測到并且標識在失敗節(jié)點上正在進行的數(shù)據(jù)庫中的任務。任何被標記為可恢復(任務詳細信息的"requests recovery"屬性)的任務都會被其他的節(jié)點重新執(zhí)行。沒有標記可恢復的任務只會被釋放出來,將會在下次相關觸發(fā)器觸發(fā)時執(zhí)行。

2. 集群管理用到的表

--任務詳細信息表

  1. CREATE TABLE qrtz_job_details
  2. (
  3. JOB_NAME VARCHAR2(80) NOT NULL,
  4. JOB_GROUP VARCHAR2(80) NOT NULL,
  5. DESCRIPTION VARCHAR2(120) NULL,
  6. JOB_CLASS_NAME VARCHAR2(128) NOT NULL,
  7. IS_DURABLE VARCHAR2(1) NOT NULL,
  8. IS_VOLATILE VARCHAR2(1) NOT NULL,
  9. IS_STATEFUL VARCHAR2(1) NOT NULL,
  10. REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, --可恢復標記
  11. JOB_DATA BLOB NULL,
  12. PRIMARY KEY (JOB_NAME,JOB_GROUP)
  13. );

--觸發(fā)器與任務關聯(lián)表

  1. CREATE TABLE qrtz_fired_triggers
  2. (
  3. ENTRY_ID VARCHAR2(95) NOT NULL,
  4. TRIGGER_NAME VARCHAR2(80) NOT NULL,
  5. TRIGGER_GROUP VARCHAR2(80) NOT NULL,
  6. IS_VOLATILE VARCHAR2(1) NOT NULL,
  7. INSTANCE_NAME VARCHAR2(80) NOT NULL,
  8. FIRED_TIME NUMBER(13) NOT NULL,
  9. STATE VARCHAR2(16) NOT NULL,
  10. JOB_NAME VARCHAR2(80) NULL,
  11. JOB_GROUP VARCHAR2(80) NULL,
  12. IS_STATEFUL VARCHAR2(1) NULL,
  13. REQUESTS_RECOVERY VARCHAR2(1) NULL, --可恢復標記
  14. PRIMARY KEY (ENTRY_ID)
  15. );

--調(diào)度器狀態(tài)表

  1. TABLE qrtz_scheduler_state
  2. (
  3. INSTANCE_NAME VARCHAR2(80) NOT NULL, --調(diào)度器實例ID
  4. LAST_CHECKIN_TIME NUMBER(13) NOT NULL, --上次檢查時間
  5. CHECKIN_INTERVAL NUMBER(13) NOT NULL, --檢查時間間隔
  6. RECOVERER VARCHAR2(80) NULL, --恢復調(diào)度器
  7. PRIMARY KEY (INSTANCE_NAME)
  8. );

2.2 集群配置

  通過設置"org.quartz.jobStore.isClustered"屬性為"true"來激活集群特性。在集群中的每一個實例都必須有一個唯一的"instance id" ("org.quartz.scheduler.instanceId" 屬性), 但是應該有相同的"scheduler instance name" ("org.quartz.scheduler.instanceName"),也就是說集群中的每一個實例都必須使用相同的quartz.properties 配置文件。除了以下幾種例外,配置文件的內(nèi)容其他都必須相同:

 不同的線程池大小,
 不同的"org.quartz.scheduler.instanceId"屬性值(這個可以很容易做到,設定為"AUTO"即可)。
 注意: 永遠不要在不同的機器上運行集群,除非他們的時鐘是使用某種形式的同步服務(守護)非常有規(guī)律的運行(時鐘必須在一分一秒內(nèi))來達到同步。還有: 永遠不要觸發(fā)一個非集群的實例,如果其他的實例正在同一個數(shù)據(jù)庫表上運行。你將使你的數(shù)據(jù)嚴重腐蝕,出現(xiàn)非預期行為。
 示例及詳細配置說明,請參照附錄Quartz配置文件說明。

3 附錄

3.1 Quartz配置文件說明

3.1.1 Quartz配置文件基本說明

  文件名稱:默認文件名稱quartz.properties,可以通過更改系統(tǒng)屬性“org.quartz.properties”來加載自定義的配置。
  格式:屬性文件

3.1.2 Quartz配置文件詳細說明

3.1.2.1 Scheduler主要屬性的配置

 

  1. # Scheduler主要屬性的一般定義模式如下:
  2. #
  3. # org.quartz.scheduler.instanceName = SCHED_NAME
  4. # org.quartz.scheduler.instanceId = INSTANCE_ID
  5. # org.quartz.scheduler.threadName = THREAD_NAME
  6. # org.quartz.scheduler.rmi.export = false
  7. # org.quartz.scheduler.rmi.proxy = false
  8. # org.quartz.scheduler.rmi.registryHost = localhost
  9. # org.quartz.scheduler.rmi.registryPort = 1099
  10. # org.quartz.scheduler.rmi.createRegistry = never
  11. # org.quartz.scheduler.userTransactionURL = USER_TX_LOCATION
  12. # org.quartz.scheduler.wrapJobExecutionInUserTransaction = JOBS_IN_USER_TX
  13. # org.quartz.scheduler.idleWaitTime = IDLE_WAIT_TIME
  14. # org.quartz.scheduler.dbFailureRetryInterval = DB_FAILURE_RETRY_INTERVAL
  15. # org.quartz.scheduler.classLoadHelper.class = CLASS_LOAD_HELPER_CLASS
  16. # org.quartz.context.key.SOME_KEY = SOME_VALUE

 

下面是具體說明:



3.1.2.2 線程池(ThreadPool)的配置

下面是具體說明: 

  1. # 定制一個線程池的一般模式如下:
  2. #
  3. # org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  4. # org.quartz.threadPool.threadCount = THREAD_COUNT
  5. # org.quartz.threadPool.threadPriority = THREAD_PRIO
  6. #
  7. # 簡單線程池(SimpleThreadPool)的選項參數(shù):
  8. #
  9. # org.quartz.threadPool.makeThreadsDaemons = DAEMON_THREADS
  10. # org.quartz.threadPool.threadsInheritGroupOfInitializingThread = INHERIT_GRP
  11. # org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = INHERIT_LDR
  12. #
  13. # or
  14. #
  15. # org.quartz.threadPool.class = com.mycompany.goo.FooThreadPool
  16. # org.quartz.threadPool.somePropOfFooThreadPool = someValue
  17. #

查看本文第二部分:http://gocom./modules/newbb/forumtopic19180_9963_40.htm

2007/12/19 10:08

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多