zoukankan      html  css  js  c++  java
  • 任务调度之集群(基于Quartz.net)

    上一篇我们完成了任务调度的持久化,传送门:任务调度之持久化(基于Quartz.net)

    这篇我们来完成Quartz.net的一个比较优秀的功能,即集群;集群可以提高任务调度服务的容灾性,

    当一个节点宕机后,其他节点会自动补上去,把超时的Job继续执行下去。

    当然了,某个Job同一时刻只会运行在一个节点上,他们是通过数据库锁实现的。

    1、集群依赖于数据表

    之前2张我们介绍的都是运行在内存上的Job,而集群则一定需要依赖于Quartz.net本身的数据表结构才行

    就是这个: enter_db_name_here

      1 -- this script is for SQL Server and Azure SQL
      2 
      3 USE [enter_db_name_here]
      4 GO
      5 
      6 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
      7 ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS
      8 GO
      9 
     10 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
     11 ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS
     12 GO
     13 
     14 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
     15 ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS
     16 GO
     17 
     18 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
     19 ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS
     20 GO
     21 
     22 IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS]') AND parent_object_id = OBJECT_ID(N'[dbo].[QRTZ_JOB_LISTENERS]'))
     23 ALTER TABLE [dbo].[QRTZ_JOB_LISTENERS] DROP CONSTRAINT [FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS]
     24 
     25 IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS]') AND parent_object_id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGER_LISTENERS]'))
     26 ALTER TABLE [dbo].[QRTZ_TRIGGER_LISTENERS] DROP CONSTRAINT [FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS]
     27 
     28 
     29 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     30 DROP TABLE [dbo].[QRTZ_CALENDARS]
     31 GO
     32 
     33 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     34 DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS]
     35 GO
     36 
     37 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     38 DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS]
     39 GO
     40 
     41 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     42 DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS]
     43 GO
     44 
     45 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     46 DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]
     47 GO
     48 
     49 IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_JOB_LISTENERS]') AND type in (N'U'))
     50 DROP TABLE [dbo].[QRTZ_JOB_LISTENERS]
     51 
     52 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     53 DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE]
     54 GO
     55 
     56 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     57 DROP TABLE [dbo].[QRTZ_LOCKS]
     58 GO
     59 IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGER_LISTENERS]') AND type in (N'U'))
     60 DROP TABLE [dbo].[QRTZ_TRIGGER_LISTENERS]
     61 
     62 
     63 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     64 DROP TABLE [dbo].[QRTZ_JOB_DETAILS]
     65 GO
     66 
     67 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     68 DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
     69 GO
     70 
     71 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     72 DROP TABLE [dbo].QRTZ_SIMPROP_TRIGGERS
     73 GO
     74 
     75 IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
     76 DROP TABLE [dbo].[QRTZ_TRIGGERS]
     77 GO
     78 
     79 CREATE TABLE [dbo].[QRTZ_CALENDARS] (
     80   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
     81   [CALENDAR_NAME] [NVARCHAR] (200)  NOT NULL ,
     82   [CALENDAR] [IMAGE] NOT NULL
     83 )
     84 GO
     85 
     86 CREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] (
     87   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
     88   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
     89   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
     90   [CRON_EXPRESSION] [NVARCHAR] (120)  NOT NULL ,
     91   [TIME_ZONE_ID] [NVARCHAR] (80) 
     92 )
     93 GO
     94 
     95 CREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] (
     96   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
     97   [ENTRY_ID] [NVARCHAR] (95)  NOT NULL ,
     98   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
     99   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
    100   [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,
    101   [FIRED_TIME] [BIGINT] NOT NULL ,
    102   [SCHED_TIME] [BIGINT] NOT NULL ,
    103   [PRIORITY] [INTEGER] NOT NULL ,
    104   [STATE] [NVARCHAR] (16)  NOT NULL,
    105   [JOB_NAME] [NVARCHAR] (150)  NULL ,
    106   [JOB_GROUP] [NVARCHAR] (150)  NULL ,
    107   [IS_NONCONCURRENT] BIT  NULL ,
    108   [REQUESTS_RECOVERY] BIT  NULL 
    109 )
    110 GO
    111 
    112 CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (
    113   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    114   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL 
    115 )
    116 GO
    117 
    118 CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (
    119   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    120   [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,
    121   [LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,
    122   [CHECKIN_INTERVAL] [BIGINT] NOT NULL
    123 )
    124 GO
    125 
    126 CREATE TABLE [dbo].[QRTZ_LOCKS] (
    127   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    128   [LOCK_NAME] [NVARCHAR] (40)  NOT NULL 
    129 )
    130 GO
    131 
    132 CREATE TABLE [dbo].[QRTZ_JOB_DETAILS] (
    133   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    134   [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,
    135   [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,
    136   [DESCRIPTION] [NVARCHAR] (250) NULL ,
    137   [JOB_CLASS_NAME] [NVARCHAR] (250)  NOT NULL ,
    138   [IS_DURABLE] BIT  NOT NULL ,
    139   [IS_NONCONCURRENT] BIT  NOT NULL ,
    140   [IS_UPDATE_DATA] BIT  NOT NULL ,
    141   [REQUESTS_RECOVERY] BIT  NOT NULL ,
    142   [JOB_DATA] [IMAGE] NULL
    143 )
    144 GO
    145 
    146 CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (
    147   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    148   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
    149   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
    150   [REPEAT_COUNT] [INTEGER] NOT NULL ,
    151   [REPEAT_INTERVAL] [BIGINT] NOT NULL ,
    152   [TIMES_TRIGGERED] [INTEGER] NOT NULL
    153 )
    154 GO
    155 
    156 CREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] (
    157   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    158   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
    159   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
    160   [STR_PROP_1] [NVARCHAR] (512) NULL,
    161   [STR_PROP_2] [NVARCHAR] (512) NULL,
    162   [STR_PROP_3] [NVARCHAR] (512) NULL,
    163   [INT_PROP_1] [INT] NULL,
    164   [INT_PROP_2] [INT] NULL,
    165   [LONG_PROP_1] [BIGINT] NULL,
    166   [LONG_PROP_2] [BIGINT] NULL,
    167   [DEC_PROP_1] [NUMERIC] (13,4) NULL,
    168   [DEC_PROP_2] [NUMERIC] (13,4) NULL,
    169   [BOOL_PROP_1] BIT NULL,
    170   [BOOL_PROP_2] BIT NULL,
    171 )
    172 GO
    173 
    174 CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (
    175   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    176   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
    177   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
    178   [BLOB_DATA] [IMAGE] NULL
    179 )
    180 GO
    181 
    182 CREATE TABLE [dbo].[QRTZ_TRIGGERS] (
    183   [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
    184   [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
    185   [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
    186   [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,
    187   [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,
    188   [DESCRIPTION] [NVARCHAR] (250) NULL ,
    189   [NEXT_FIRE_TIME] [BIGINT] NULL ,
    190   [PREV_FIRE_TIME] [BIGINT] NULL ,
    191   [PRIORITY] [INTEGER] NULL ,
    192   [TRIGGER_STATE] [NVARCHAR] (16)  NOT NULL ,
    193   [TRIGGER_TYPE] [NVARCHAR] (8)  NOT NULL ,
    194   [START_TIME] [BIGINT] NOT NULL ,
    195   [END_TIME] [BIGINT] NULL ,
    196   [CALENDAR_NAME] [NVARCHAR] (200)  NULL ,
    197   [MISFIRE_INSTR] [INTEGER] NULL ,
    198   [JOB_DATA] [IMAGE] NULL
    199 )
    200 GO
    201 
    202 ALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD
    203   CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY  CLUSTERED
    204   (
    205     [SCHED_NAME],
    206     [CALENDAR_NAME]
    207   ) 
    208 GO
    209 
    210 ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD
    211   CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY  CLUSTERED
    212   (
    213     [SCHED_NAME],
    214     [TRIGGER_NAME],
    215     [TRIGGER_GROUP]
    216   ) 
    217 GO
    218 
    219 ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD
    220   CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY  CLUSTERED
    221   (
    222     [SCHED_NAME],
    223     [ENTRY_ID]
    224   ) 
    225 GO
    226 
    227 ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD
    228   CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY  CLUSTERED
    229   (
    230     [SCHED_NAME],
    231     [TRIGGER_GROUP]
    232   ) 
    233 GO
    234 
    235 ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD
    236   CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY  CLUSTERED
    237   (
    238     [SCHED_NAME],
    239     [INSTANCE_NAME]
    240   ) 
    241 GO
    242 
    243 ALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD
    244   CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY  CLUSTERED
    245   (
    246     [SCHED_NAME],
    247     [LOCK_NAME]
    248   ) 
    249 GO
    250 
    251 ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD
    252   CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY  CLUSTERED
    253   (
    254     [SCHED_NAME],
    255     [JOB_NAME],
    256     [JOB_GROUP]
    257   ) 
    258 GO
    259 
    260 ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD
    261   CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY  CLUSTERED
    262   (
    263     [SCHED_NAME],
    264     [TRIGGER_NAME],
    265     [TRIGGER_GROUP]
    266   ) 
    267 GO
    268 
    269 ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD
    270   CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY  CLUSTERED
    271   (
    272     [SCHED_NAME],
    273     [TRIGGER_NAME],
    274     [TRIGGER_GROUP]
    275   ) 
    276 GO
    277 
    278 ALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD
    279   CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY  CLUSTERED
    280   (
    281     [SCHED_NAME],
    282     [TRIGGER_NAME],
    283     [TRIGGER_GROUP]
    284   ) 
    285 GO
    286 
    287 ALTER TABLE [dbo].QRTZ_BLOB_TRIGGERS WITH NOCHECK ADD
    288   CONSTRAINT [PK_QRTZ_BLOB_TRIGGERS] PRIMARY KEY  CLUSTERED
    289   (
    290     [SCHED_NAME],
    291     [TRIGGER_NAME],
    292     [TRIGGER_GROUP]
    293   ) 
    294 GO
    295 
    296 ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD
    297   CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
    298   (
    299     [SCHED_NAME],
    300     [TRIGGER_NAME],
    301     [TRIGGER_GROUP]
    302   ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
    303     [SCHED_NAME],
    304     [TRIGGER_NAME],
    305     [TRIGGER_GROUP]
    306   ) ON DELETE CASCADE
    307 GO
    308 
    309 ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD
    310   CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
    311   (
    312     [SCHED_NAME],
    313     [TRIGGER_NAME],
    314     [TRIGGER_GROUP]
    315   ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
    316     [SCHED_NAME],
    317     [TRIGGER_NAME],
    318     [TRIGGER_GROUP]
    319   ) ON DELETE CASCADE
    320 GO
    321 
    322 ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD
    323   CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
    324   (
    325     [SCHED_NAME],
    326     [TRIGGER_NAME],
    327     [TRIGGER_GROUP]
    328   ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
    329     [SCHED_NAME],
    330     [TRIGGER_NAME],
    331     [TRIGGER_GROUP]
    332   ) ON DELETE CASCADE
    333 GO
    334 
    335 ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD
    336   CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY
    337   (
    338     [SCHED_NAME],
    339     [JOB_NAME],
    340     [JOB_GROUP]
    341   ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] (
    342     [SCHED_NAME],
    343     [JOB_NAME],
    344     [JOB_GROUP]
    345   )
    346 GO
    347 
    348 CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP)
    349 CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP)
    350 CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME)
    351 CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP)
    352 CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE)
    353 CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE)
    354 CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE)
    355 CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME)
    356 CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME)
    357 CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME)
    358 CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE)
    359 CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE)
    360 
    361 CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME)
    362 CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY)
    363 CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP)
    364 CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP)
    365 CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
    366 CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP)
    367 GO
    View Code

    直接创建数据库运行就好了,至于表结构用途请百度

    2、修改JobServer

    RemoteServer.cs,即上篇的那个服务端的类

    1             properties["quartz.jobStore.clustered"] = "true";
    2             properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
    3             properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
    4             properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
    5             properties["quartz.jobStore.dataSource"] = "myDS";
    6             properties["quartz.dataSource.myDS.connectionString"] = @"Data Source=JIANRONGLAN-PCSQLEXPRESS;Initial Catalog=SystemBase;User ID=sa;Password=123456";
    7             properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";  

    参数初始化中加上上边的参数就可以了,其他不用改

    3、远端控制界面

    MVC的控制界面有改动,上一篇我们是新建了一个Job表,包含很多字段,但是现在加入组件本身的表结构,那Job有些字段就点多余;

    所以我把时间和状态字段删掉了,新Job

     1     public class Job 
     2     {
     3         [IgnoreProperty(true)]
     4         public int RowNumber { get; set; }
     5 
     6         /// <summary>Id</summary>
     7         public Guid Id { get; set; }
     8 
     9         /// <summary>GroupName</summary>
    10         public string GroupName { get; set; }
    11 
    12         /// <summary>JobName</summary>
    13         public string JobName { get; set; }
    14 
    15         /// <summary>TriggerName</summary>
    16         public string TriggerName { get; set; }
    17 
    18         /// <summary>Cron</summary>
    19         public string Cron { get; set; }
    20 
    21         /// <summary>Description</summary>
    22         public string Description { get; set; }
    23 
    24         /// <summary>CreateTime</summary>    
    25         public DateTime CreateTime { get; set; }
    26     }

    然后列表查询的时候直接关联QRTZ_TRIGGERS 就好了,我们来看看效果

    4、部署Quartz节点

    4.1 拷贝JobServer,运行JobServer.exe,分别是128/129

    好了,现在2个机器服务端都在等待状态了

    4.2、控制端开启任务

    4.3、看到分配到129运行了,最后执行时间是23:45:15,这是128还是等等状态的。然后关闭129的JobServer

    4.4、128开始运行,看到128在23:46:42才开始运行

    好了,集群就这么多点东西,很简单的,搭建环境还比较麻烦

  • 相关阅读:
    [转载]写作经验谈--如何写一本书?
    决定写一本书
    c中自定义函数通过sizeof来输出数组的长度为何不正确?【原创】
    [转]关于PHP的漏洞以及如何防止PHP漏洞?
    [转]PHP安全之防止你的源代码或重要配置信息暴露在外
    PHPUnit 单元测试框架(鸡肋)
    [转]避免PHP-FPM内存泄漏导致内存耗尽
    [转]PHP ffmpeg截取视频指定帧为图片,获取rotation信息并旋转
    ThinkPHP 缓存 以及Zend OPCache提升PHP性能
    简单测漏 语句
  • 原文地址:https://www.cnblogs.com/lanxiaoke/p/6637714.html
Copyright © 2011-2022 走看看