入门
建筑
专用服务平台
NServiceBus服务总线
运输
坚持不懈
服务洞察力
服务脉冲
服务控制
监测
样品

石英。NET使用

此示例说明了石英。净值从NServiceBus端点内发送消息。

石英。NET是一个功能齐全的开源作业调度系统,可以从最小的应用程序到大型企业系统使用。

运行项目

  1. 启动Scheduler和Receiver项目。
  2. 启动时,Scheduler将安排每3秒向Receiver发送一条消息。
  3. 接收方将处理消息。

代码演练

上下文帮助程序

帮助注射和提取IEndpointInstance(IEndpoint实例)来自Quartz调度程序上下文。

公共静态类QuartzContextExtensions{公共静态IEndpointInstance EndpointInstance(此IJobExecutionContext上下文){return(IEndpointInstance)上下文。调度程序。上下文[“EndpointInstance”];}公共静态void SetEndpointInstance(此IScheduler调度程序,IEndpointInstance实例){调度程序。Context[“EndpointInstance”]=实例;}}

Quartz还通过JobFactory API.

配置并启动调度程序

端点已启动,并且IEndpointInstance(IEndpoint实例)被注入Quartz调度程序上下文。

var endpointInstance=等待端点。开始(endpointConfiguration);日志提供程序。SetCurrentLogProvider(新QuartzConsoleLogProviders());var schedulerFactory=新的标准调度工厂();var scheduler=等待调度程序工厂。GetScheduler();//将endpointInstance注入调度程序上下文调度程序。设置端点实例(端点实例);等待调度程序。开始();

作业定义

A石英IJob公司向接收方发送消息的。

公共类SendMessageJob:IJob公司{公共异步任务执行(IJobExecutionContext上下文){尝试{var endpointInstance=上下文。端点实例();var消息=新MyMessage();等待endpointInstance。发送(“Samples.QuartzScheduler.Receiver”,消息);}catch(异常异常){慰问。WriteLine($“执行失败:{exception.Message}”);//TODO:处理异常,不抛出。//考虑安装断路器投掷;}}}

注释Quartz上下文扩展用于访问IEndpointInstance(IEndpoint实例).

安排作业

//定义作业并将其绑定到SendMessageJob类var job=作业生成器。创建<发送消息作业>().WithIdentity(“job1”,“group1”).Build();//触发作业立即运行,然后每3秒重复一次var触发器=TriggerBuilder。创建().WithIdentity(“触发器1”,“组1”).StartNow().带简单计划(操作:生成器=>{建设者.WithIntervalInSeconds(3).RepeatForever();}).Build();//告诉石英使用触发器安排工作等待调度程序。ScheduleJob(作业、触发器);

清理

当终结点停止时,应关闭Quartz调度程序。

等待调度程序。关机();等待endpointInstance。停止();

异常处理

石英建议处理异常:

每个侦听器方法都应该包含一个try-catch块,用于处理所有可能的异常。如果监听器抛出异常,可能会导致其他监听器没有得到通知和/或阻止作业的执行等。

在作业的catch块中,考虑实现断路器或委派给严重错误.

横向扩展

在使用示例中的方法时,需要注意的是,每个端点实例中都有一个Quartz调度程序实例。如果端点是按比例缩小,然后配置的作业将在每个运行的实例中执行。一个执着的人Quartz JobStore公司可以帮助管理Quartz调度程序的共享状态,包括作业、触发器、日历等。

关于石英的更多信息

相关文章

  • 行程安排
    计划任务或操作/lambda,以给定的间隔重复执行。
  • 超时管理器
    使用NServiceBus发送的延迟消息的消息存储。