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的简单使用的更多相关文章

  1. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  2. [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务

    除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...

  3. topshelf和quartz

    topshelf和quartz内部分享 阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介 ...

  4. topshelf 开发windows 服务资料

    官方配置 http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes to ...

  5. Topshelf+Quartz.net+Dapper+Npoi(一)

    背景 前段时间公司有个需求(每天给业务导出一批数据,以excel的形式通过邮件发送给他).A说:直接写个服务,判断等于某个时间点,执行一下sql语句,生成excel,写个EmaiHelper发送给他不 ...

  6. .NET开发者必备的工具箱

    本文作者Spencer是一名专注于ASP.NET和C#的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等. 如果你是 ...

  7. 人生维艰,何不利用开源.NET函数库让工作更轻松

    今天推荐的文章会谈到一些让你工作更轻松的开源.NET函数库. 即使业界有时候认为.NET开源社区不太健康,很多开发团队都更多依赖于微软提供的东西来开发.不过最近在.NET世界中还是诞生了一些优秀和有意 ...

  8. Net常用资源小集

    Visual Studio——IDEs工具之王,.NET开发者的必备IDE.Visual Studio提供非常强大的启动工具箱,并且还有一些让人惊喜的插件支持.在去年,微软发布了Visual Stud ...

  9. .NET开发者需要的工具箱

    本文作者 Spencer 是一名专注于 ASP.NET 和 C# 的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等 ...

随机推荐

  1. 超链接target属性的取值和作用?

    <a>标签的target属性规定在何处打开连接文档 属性值 _black:点击一次打开一个新窗口 _new:始终在同一个新窗口中打开 _self:默认,在当前窗口打开 _parent:在父 ...

  2. e课表项目第二次冲刺周期第十天

    昨天完成了什么? 昨天还有一天第一次冲刺周期就结束了,我们的工作也接近尾声了,所以今天我利用之前的方法,完成了对监听的设置,以及对修改界面的编写,可以实现相应的删除和修改的功能,然后我和我们组的成员商 ...

  3. Save your cats Aizu - 2224

    Nicholas Y. Alford was a cat lover. He had a garden in a village and kept many cats in his garden. T ...

  4. Linux 命令之 mkdir

    mkdir的作用是创建一个目录,可以理解为 make directory 的缩写. 创建目录 mkdir dir_name 在当前目录创建一个名为 dir_name 的目录. 同时创建多级目录 假设现 ...

  5. Redis学习三(进阶功能).

    一.排序 redis 支持对 list,set 和 zset 元素的排序,排序的时间复杂度是 O(N+M*log(M)).(N 是集合大小,M 为返回元素的数量) sort key [BY patte ...

  6. js 变量与常量

    编辑器:Sublime Text 3 <!DOCTYPE html><html lang="en"><head> <meta charse ...

  7. Java ThreadLocal 的使用与源码解析

    GitHub Page: http://blog.cloudli.top/posts/Java-ThreadLocal-的使用与源码解析/ ThreadLocal 主要解决的是每个线程绑定自己的值,可 ...

  8. Web渗透之mssql2005 差异备份getshell

    这里记录下mssql2005差异备份拿shell的过程 http://192.168.5.21:81/index.asp?id=1;alter/**/database/**/[asp_test]/** ...

  9. web安全之点击劫持

    点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式, 一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明 ...

  10. msf之hash攻击

    使用hashdump抓取密码(需要系统管理权限) 另外一个更强大的模块 smart_hashdump 如果目标是win7 就需要先绕过UAC 还可以使用msf内置的mimikatz抓取hash msv ...