日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用sqlserver搭建高可用双机热备的Quartz集群部署

發(fā)布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用sqlserver搭建高可用双机热备的Quartz集群部署 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一般拿 Timer 和 Quartz 相比較的,簡直就是對 Quartz 的侮辱,兩者的功能根本就不在一個層級上,如本篇介紹的Quartz強大的集群機制,可以采用基于sqlserver,mysql的集群方案,當然還可以在第三方插件的基礎上實現(xiàn)quartz序列化到nosql的mongodb,redis,震撼力可想而知,接下來本篇就和大家聊一聊怎么搭建基于sqlserver的quartz集群,實現(xiàn)這么一種雙機熱備的集群功能。

一:下載sqlserver版的建表腳本

首先在 github 上搜索quartz的源代碼,在源碼項目的/database/tables目錄下,可以找到firebird,oracle,mysql,sqlserver等建庫腳本,本篇演示sqlserver版本的建表腳本。https://github.com/quartznet/quartznet/tree/master/database/tables 如下圖所示

從上面的截圖中可以看到,我接下來要做的事情就是增加一個你需要創(chuàng)建的database名字,這里取為:【quartz】,改后如下:

二:配置quartz的集群參數(shù)

當我們寫?var scheduler = StdSchedulerFactory.GetDefaultScheduler()?這段代碼的時候,如果大家看過源碼的話,會知道這個GetScheduler的過程中有一個初始化方法Instantiate,此方法中你會發(fā)現(xiàn)在做 DBProvider 的時候會需要幾個參數(shù)來初始化DB的,比如下面看到的幾個標紅代碼。

IList<string> dsNames = cfg.GetPropertyGroups(PropertyDataSourcePrefix);foreach (string dataSourceName in dsNames){string datasourceKey = "{0}.{1}".FormatInvariant(PropertyDataSourcePrefix, dataSourceName);NameValueCollection propertyGroup = cfg.GetPropertyGroup(datasourceKey, true);Type cpType = loadHelper.LoadType(pp.GetStringProperty(PropertyDbProviderType, null));// custom connectionProvider...if (cpType != null){// remove the type name, so it isn't attempted to be setpp.UnderlyingProperties.Remove(PropertyDbProviderType);ObjectUtils.SetObjectProperties(cp, pp.UnderlyingProperties);cp.Initialize();dbMgr = DBConnectionManager.Instance;dbMgr.AddConnectionProvider(dataSourceName, cp);}else{string dsProvider = pp.GetStringProperty(PropertyDataSourceProvider, null);string dsConnectionString = pp.GetStringProperty(PropertyDataSourceConnectionString, null);string dsConnectionStringName = pp.GetStringProperty(PropertyDataSourceConnectionStringName, null);if (dsConnectionString == null && !String.IsNullOrEmpty(dsConnectionStringName)){ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings[dsConnectionStringName];dsConnectionString = connectionStringSettings.ConnectionString;}try{DbProvider dbp = new DbProvider(dsProvider, dsConnectionString);dbp.Initialize();dbMgr = DBConnectionManager.Instance;dbMgr.AddConnectionProvider(dataSourceName, dbp);}catch (Exception exception){initException = new SchedulerException("Could not Initialize DataSource: {0}".FormatInvariant(dataSourceName), exception);throw initException;}}}

接下來的問題就是這幾個屬性是如何配置進去的,仔細觀察上面代碼,你會發(fā)現(xiàn)所有的配置的源頭都來自于cfg變量,ok,接下來繼續(xù)翻看代碼,相信你會看到有一個Initialize方法就是做cfg變量的初始化,如下代碼所示:

public void Initialize(){NameValueCollection props = (NameValueCollection) ConfigurationManager.GetSection(ConfigurationSectionName);string requestedFile = QuartzEnvironment.GetEnvironmentVariable(PropertiesFile);string propFileName = requestedFile != null && requestedFile.Trim().Length > 0 ? requestedFile : "~/quartz.config";// check for specialstry{propFileName = FileUtil.ResolveFile(propFileName);}catch (SecurityException){log.WarnFormat("Unable to resolve file path '{0}' due to security exception, probably running under medium trust");propFileName = "quartz.config";}Initialize(OverrideWithSysProps(props));}

仔細閱讀上面的一串代碼,你會發(fā)現(xiàn),默認quartz參數(shù)配置來源于三個地方。

  • app.config中的p節(jié)點。

  • bin目錄下的~/quartz.config文件。

  • 默認配置的NameValueCollection字典集合,也就是上一篇博客給大家做的一個演示。

我個人不怎么喜歡通過 quartz.config 文件進行配置,這樣也容易寫死,所以我還是喜歡使用最簡單的 NameValueCollection 配置,因為它的數(shù)據(jù)源可來源于第三方存儲結構中,配置代碼如下:

//1.首先創(chuàng)建一個作業(yè)調度池var properties = new NameValueCollection();//存儲類型properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";//驅動類型properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"; //數(shù)據(jù)源名稱properties["quartz.jobStore.dataSource"] = "myDS";//連接字符串properties["quartz.dataSource.myDS.connectionString"] = @"server=.;Initial Catalog=quartz;Integrated Security=True";//sqlserver版本properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";//是否集群properties["quartz.jobStore.clustered"] = "true";properties["quartz.scheduler.instanceId"] = "AUTO";

上面的代碼配置我都加過詳細的注釋,大家應該都能看得懂,而且這些配置就是這么定死的,沒什么修改的空間,大家記住即可。

三:Job和Trigger定義

在集群中環(huán)境下,job和trigger的定義該怎么寫的?大家也不要想的太復雜,注意一點就可以了,在Schedule一個Job時候,通過CheckExists判斷一下這個Job在Scheduler中是否已經(jīng)存在了,如果存在,你就不能再次通過Schedule去重復調度一個Job就可以了。。。所以判斷的代碼也很簡單,如下所示:

IScheduler scheduler = factory.GetScheduler();scheduler.Start();var jobKey = JobKey.Create("myjob", "group");if (scheduler.CheckExists(jobKey)){Console.WriteLine("當前job已經(jīng)存在,無需調度:{0}", jobKey.ToString());}else{IJobDetail job = JobBuilder.Create<HelloJob>().WithDescription("使用quartz進行持久化存儲").StoreDurably().RequestRecovery().WithIdentity(jobKey).UsingJobData("count", 1).Build();ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()).Build();scheduler.ScheduleJob(job, trigger);Console.WriteLine("調度進行中!!!");}

上面這段代碼,大家就可以部署在多臺機器中了,是不是很簡單?

四:強大的cluster完整演示

所有的初始化工作都做完了,接下來我們copy一份bin文件,同時打開兩個console程序,如下所示,可以看到job任務只會被一個console調度,另外一個在空等待。

然后你肯定很好奇的跑到sqlserver中去看看,是否已經(jīng)有job和trigger的db存儲,很開心吧,數(shù)據(jù)都有的。。。

好了,一切都是那么完美,接下來可以展示一下quartz集群下的高可用啦,如果某一個console掛了,那么另一臺console會把這個任務給接過來,實現(xiàn)強大的高可用。。。所以我要做的事情就是把console1關掉,再看看console2是不是可以開始調度job了???

完美,這個就是本篇給大家介紹的Quartz的Cluster集群,一臺掛,另一臺頂住,雙機熱備,當然這些console你可以部署在多臺機器中,要做的就是保持各個server的時間同步,因為quarz是依賴于本機server的時間,好了,本篇就先說到這里吧。

總結

以上是生活随笔為你收集整理的使用sqlserver搭建高可用双机热备的Quartz集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 自拍偷拍第3页 | 国产精品高潮呻吟视频 | 日韩av电影手机在线观看 | 亚洲一区二区三区无码久久 | 国产又粗又硬又长又爽的演员 | 日韩av二区 | 三级网站国产 | 夜夜爽天天爽 | av制服丝袜在线 | 一级黄网站 | 亚洲精品一区二区三区精华液 | 亚洲国产无 | 无码人妻一区二区三区免费n鬼沢 | www国产精品 | 99成人| 中文字幕a级片 | 花房姑娘免费观看全集 | 看黄色一级片 | 国产剧情一区二区三区 | 日本黄色免费网址 | 91吃瓜在线 | 中文免费在线观看 | 成人在线激情视频 | 91精品国产色综合久久不8 | 影音av资源 | 97人妻精品一区二区免费 | 国产精品成人一区二区网站软件 | 黄片毛片av| 深夜视频一区二区 | brazzers欧美极品少妇 | 色四虎 | 日韩欧美视频网站 | 91九色蝌蚪91por成人 | 欧美mv日韩mv国产网站app | 久久久精品欧美 | 日韩在线视频免费 | 成人在线观看免费网站 | 亚洲欧美一区二区三区四区五区 | 香蕉网址 | 91成人福利视频 | 欧美精品乱码99久久蜜桃 | 国产精品久久久久久亚洲色 | 久久久久www | 驯服少爷漫画免费观看下拉式漫画 | 最新中文字幕免费视频 | 嫩草研究院在线观看 | 久草影音| 王者后宫yin肉h文催眠 | 欧美人与禽性xxxxx杂性 | 国产精品扒开腿做爽爽爽男男 | 一区二区视频播放 | 国产真实乱偷精品视频 | 久久香蕉精品 | 亚洲两性视频 | 亚洲丝袜中文字幕 | 中文字幕 欧美 日韩 | 一区二区三区黄 | 国产原创剧情av | 日韩精品极品 | 无码精品人妻一二三区红粉影视 | www.日韩在线观看 | 国产精品日韩一区二区 | 香蕉视频在线免费 | 亚洲成av人片在线观看 | 一区久久久 | 天天色天天色 | 奶罩不戴乳罩邻居hd播放 | 男女无遮挡免费视频 | 日韩孕交 | 国产99色| 痴女扩张宫交脱垂重口小说 | 久久精品日 | 日韩成人综合网 | 三级视频网站在线观看 | 欧洲在线观看 | 六月色婷| 免费人成视频在线播放 | 日韩精品一区二区不卡 | 日本一级吃奶淫片免费 | 欧美无专区 | 国产一卡二卡三卡 | h片在线| 亚洲伦理在线播放 | 污导航在线| 麻豆国产一区 | 天天槽 | 麻豆91精品 | 国产精品一区二区无码免费看片 | www.成人av.com| 国产精品69av| 亚洲天堂久 | 亚洲无限看 | 欧美一级淫片免费视频魅影视频 | 国内少妇毛片视频 | 最近中文字幕第一页 | 在线观看成年人视频 | 精品中文字幕在线 | 欧美一级啪啪 | 99热这里只有精品18 |