【问题标题】:Scheduling multiple Quartz jobs in Topshelf在 Topshelf 中安排多个 Quartz 作业
【发布时间】:2014-01-22 21:46:34
【问题描述】:

在此处阅读有关 Topshelf 集成的文档:https://github.com/dtinteractive/Topshelf.Integrations

看起来它应该像在HostFactory 中安排多个石英作业一样简单,但看起来第二个预定作业是唯一正在运行的作业。

我不确定如何从这里开始。但我需要安排两个按不同时间表运行的作业。第一个应该每天运行,第二个每小时运行一次。

static void Main(string[] args)
    {
        HostFactory.Run(x =>                                 
        {
            x.ScheduleQuartzJobAsService(q =>
                q.WithJob(() => JobBuilder.Create<TmsIdImportTask>().Build())
                    .AddTrigger(() =>
                        TriggerBuilder.Create()
                            .WithSimpleSchedule(builder => builder
                                .WithIntervalInMinutes(Int32.Parse(ConfigurationManager.AppSettings["ScheduleImportFrequencyInMinutes"]))
                                .RepeatForever()).Build())
            );

            x.ScheduleQuartzJobAsService(q =>
                q.WithJob(() => JobBuilder.Create<ImportTmsXMLTask>().Build())
                    .AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder =>
                        builder.WithIntervalInMinutes(Int32.Parse(ConfigurationManager.AppSettings["TMSImportFrequencyInMinutes"]))
                        .RepeatForever()).Build())
                        );


            x.RunAsLocalSystem();

            var description = ConfigurationManager.AppSettings["ServiceDescription"];
            x.SetDescription(description);

            var displayName = ConfigurationManager.AppSettings["ServiceDisplayName"];
            x.SetDisplayName(displayName);

            var serviceName = ConfigurationManager.AppSettings["ServiceName"];
            x.SetServiceName(serviceName);                       
        });       
    }

【问题讨论】:

  • 你不能把 Quartz 初始化放在你的服务类 Start() 中并关闭 Stop() 方法吗?为什么要使用这种集成?

标签: quartz.net topshelf


【解决方案1】:

我相信您遇到问题的原因是因为您正在使用

x.ScheduleQuartzJobAsService

而不是

x.ScheduleQuartzJob

我只是第一次使用 Quartz,但我有 20 个不同的时间表都在同一个主机上运行

【讨论】:

  • x.SchedulQuartzJob(扩展)在 HostConfigurator 中不存在,你能告诉我你是怎么做到的吗?
  • @VJPPaz ScheduleQuartzJob 在库 TopShelf.Quartz 中
【解决方案2】:

在 Topshelf-Quartz 集成上创建第二个服务或平底船,并拥有一个初始化两个 Quartz 实例并将其关闭的服务。

按照设计,Topshelf 只会托管一个 [服务] 进程。如果 Topshelf 托管多个进程,您将无法管理或监控任何有用的内容。它最终成为一种不可持续的模式。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多