使用Quartz/Scheduling进行公共交通 - 那里有任何示例实施吗?

Mar*_*son 8 scheduling masstransit quartz.net

我已经搜索了关于如何使用Mass Transit的Quartz集成(https://github.com/MassTransit/MassTransit-Quartz)的示例实现或博客文章的高低.

目前我只需要查看代码库附带的单元测试,我就没有取得多大进展.

是否有任何示例或好的博客帖子可以帮助我开始使用Mass Transit和Quartz Scheduling?

Pau*_*aul 7

此示例允许您在SQL数据库中保留MassTransit计划消息.开箱即用,MassTransit仅在内存中保留,而不进行一些配置更改.

首先,您需要对app/web.config文件进行细微更改,以包含以下2个块:

<configSections>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Run Code Online (Sandbox Code Playgroud)

 <quartz>
<add key="quartz.scheduler.instanceName" value="MassTransit-Quartz" />
<add key="quartz.scheduler.instanceId" value="AUTO" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="4" />
<add key="quartz.threadPool.threadPriority" value="2" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />

<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.useProperties" value="false" />

<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.clustered" value="true" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.dataSource" value="quartzDS" />

<add key="quartz.dataSource.quartzDS.connectionString" value="Server=(local);Database=Quartz;Integrated Security=SSPI" />
<add key="quartz.dataSource.quartzDS.provider" value="SqlServer-20" />
Run Code Online (Sandbox Code Playgroud)

然后,在本地SQL中,创建一个名为"Quartz"的新数据库,下载quartz.net源并找到数据库脚本

"tables_sqlServer.sql"

在Quartz本地数据库上运行此命令以创建模式.现在,您已准备好在数据库中保留预定消息,您需要从MassTransit Quartz集成库中订阅这两个消费者:

var scheduler = CreateScheduler();      
sb.SubscribeConsumer(() => new ScheduleMessageConsumer(scheduler));
sb.SubscribeConsumer(() => new CancelScheduledMessageConsumer(scheduler));
Run Code Online (Sandbox Code Playgroud)

调度程序是IScheduler的位置:

static IScheduler CreateScheduler()
{
    ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
    return schedulerFactory.GetScheduler();
}
Run Code Online (Sandbox Code Playgroud)

和sb是IServiceBus类型的servicebus.

最后,在你的代码调用中:

 Bus.ScheduleMessage(SchedulePeriodInSecondsFromNow, MessageToSchedule); 
Run Code Online (Sandbox Code Playgroud)

并拥有"MessageToSchedule"类型的消费者.如果您打开数据库并查询QRTZ_TRIGGERS表,您将看到出现在那里和QRTZ_JOB_DETAILS中的作业.

希望这可以帮助!