gpt4 book ai didi

scheduling - 使用 Quartz/Scheduling 的 Mass Transit - 是否有任何示例实现?

转载 作者:行者123 更新时间:2023-12-04 07:54:28 31 4
gpt4 key购买 nike

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

目前,我只能查看代码库附带的单元测试,但我没有取得太大进展。

是否有任何示例或好的博客文章可以帮助我开始使用 Mass Transit 和 Quartz 调度?

最佳答案

此示例允许您将 MassTransit 计划消息持久保存在 SQL 数据库中。开箱即用,MassTransit 仅保留在内存中,无需进行一些配置更改。

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

<configSections>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 <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" />

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

"tables_sqlServer.sql"



对你的 Quartz 本地数据库运行这个来创建模式。
现在您已准备好在数据库中持久保存预定消息,您需要从 MassTransit Quartz 集成库订阅这两个消费者:
var scheduler = CreateScheduler();      
sb.SubscribeConsumer(() => new ScheduleMessageConsumer(scheduler));
sb.SubscribeConsumer(() => new CancelScheduledMessageConsumer(scheduler));

其中 scheduler 是一个 IScheduler:
static IScheduler CreateScheduler()
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
return schedulerFactory.GetScheduler();
}

sb 是您的 IServiceBus 类型的服务总线。

最后,在您的代码调用中:
 Bus.ScheduleMessage(SchedulePeriodInSecondsFromNow, MessageToSchedule); 

并有一个“MessageToSchedule”类型的消费者。
如果您打开数据库并查询 QRTZ_TRIGGERS 表,您将看到那里和 QRTZ_JOB_DETAILS 中出现作业。

希望这可以帮助!

关于scheduling - 使用 Quartz/Scheduling 的 Mass Transit - 是否有任何示例实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355573/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com