Topshelf+Quatz.Net的简单使用
Topshelf+Quatz.Net的简单使用
一 Topshelf概述
Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务。Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
二 Topshelf使用
1 新建Timer定时任务,并在Topshelf中使用
public class TownCrier
{
private readonly Timer timer;
public TownCrier()
{
timer = new Timer() { AutoReset = true };
timer.Elapsed += (sender,eventArgs) => Console.WriteLine($"It is {DateTime.Now} and all is well");
}
public void Start()
{
timer.Start();
}
public void Stop()
{
timer.Stop();
} } static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<TownCrier>(s =>
{
s.ConstructUsing(name => new TownCrier());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("QuartzNet任务调度服务,灵活配置任务计划");
x.SetDisplayName("QuartzJobShedule");
x.SetServiceName("Quartz任务调度框架");
}
);
}
2 执行程序,正常运行,效果如下

三 Quartz.Net概述
在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候可以使用Quartz.Net。
Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。
Quartz.Net是一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持Cron表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承IJob接口即可。
对于小型应用,可以集成到你的系统中,对于企业级系统,它提供了Routing支持,提供了Group来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。
四 Quartz.Net使用
1 创建一个任务,继承IJob接口
/// <summary>
/// 继承IJob的一个任务
/// </summary>
public class HelloQuartzJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Hello Quartz.Net");
});
}
}
2 在程序启动时创建调度器(Scheduler),并添加HelloQuartzJob的调度
static async Task Main(string[] args)
{
//从工厂中获取调度器实例
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); //创建作业和触发器
var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build();
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(m =>
{
m.WithRepeatCount().WithIntervalInSeconds();
})
.Build(); Console.WriteLine($"任务调度器已启动"); //添加调度
await scheduler.ScheduleJob(jobDetail, trigger); await scheduler.Start();
Console.ReadKey();
}
3 执行结果

五 Topshelf+Quartz.Net
1 创建Quartz的调度器类,实现Start和Stop方法
public class JobConfigure
{
private IScheduler scheduler; public async Task GetJobConfigure()
{
//从工厂中获取调度器实例
scheduler = await StdSchedulerFactory.GetDefaultScheduler();
//创建作业和触发器
var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build();
var trigger = TriggerBuilder.Create().WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever().WithRepeatCount())
.Build();
//添加调度
await scheduler.ScheduleJob(jobDetail, trigger);
} public void Start()
{
this.GetJobConfigure().Wait();
scheduler.Start();
}
public void Stop()
{
scheduler.Shutdown(true);
} }
2 在启动程序中创建调度器(Scheduler),并添加JobConfigure的调度
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<JobConfigure>(s =>
{
s.ConstructUsing(name => new JobConfigure());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("QuartzNet任务调度服务,灵活配置任务计划");
x.SetDisplayName("QuartzJobShedule");
x.SetServiceName("Quartz任务调度框架");
}
);
}
3 启动程序

Topshelf+Quatz.Net的简单使用的更多相关文章
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务
除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...
- topshelf和quartz
topshelf和quartz内部分享 阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介 ...
- topshelf 开发windows 服务资料
官方配置 http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes to ...
- Topshelf+Quartz.net+Dapper+Npoi(一)
背景 前段时间公司有个需求(每天给业务导出一批数据,以excel的形式通过邮件发送给他).A说:直接写个服务,判断等于某个时间点,执行一下sql语句,生成excel,写个EmaiHelper发送给他不 ...
- .NET开发者必备的工具箱
本文作者Spencer是一名专注于ASP.NET和C#的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等. 如果你是 ...
- 人生维艰,何不利用开源.NET函数库让工作更轻松
今天推荐的文章会谈到一些让你工作更轻松的开源.NET函数库. 即使业界有时候认为.NET开源社区不太健康,很多开发团队都更多依赖于微软提供的东西来开发.不过最近在.NET世界中还是诞生了一些优秀和有意 ...
- Net常用资源小集
Visual Studio——IDEs工具之王,.NET开发者的必备IDE.Visual Studio提供非常强大的启动工具箱,并且还有一些让人惊喜的插件支持.在去年,微软发布了Visual Stud ...
- .NET开发者需要的工具箱
本文作者 Spencer 是一名专注于 ASP.NET 和 C# 的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等 ...
随机推荐
- Curl的移植编译以及注意事项
最近需要用curl来发送http请求,遇到了不少问题,查了不少资料,都是零零散散的,现在总结下. 1.移植编译 ./configure --prefix=$(PWD)/build --host=a ...
- 【Tomcat】tomcat7 设置成系统服务启动
1.启动cmd 2.cd C:\Program Files\tomcat7\bin 3.service.bat install 4.打开tomcat7w.exe可以启动管理服务
- 【JavaScript】使用纯JS实现多张图片的懒加载(附源码)
一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背 ...
- 31、vue-cli3引入封装svg图标
svg图标放大不失真,png会出现失真现象. 一.方法一 1.在对应vue项目里添加插件 vue add svg-sprite 输入 Y 2.在执行 npm install svgo svgo-loa ...
- docker在Mac上的下载安装
在Mac上下载安装docker,下载链接:Stable 安装成功后启动终端,检查安装后的docker版本: yanguobindeMacBook-Pro:~ yanguobin$ docker --v ...
- 用 Sphinx 搭建博客时,如何自定义插件?
之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建. 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清 ...
- 攻防世界(XCTF)WEB(进阶区)write up(二)
国庆就要莫得了 起床刷几道 NewsCenter mfw Training-WWW-Robots NaNNaNNaNNaN-Batman bug NewsCenter search传参那里发现有注 ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...
- [JZOJ5866]【NOIP2018模拟9.13】指引
Description
- jquery mutilselect 插件添加中英文自动补全
jquery mutilselect默认只能根据设置的option来进行自动提示 $.each(availableTags, function(key, value) { $('#channels') ...