简单的.NET后台定时服务框架
这里只是一个简单的后台开发框架。说白了就是为了方便开发,就是单纯的想专注于开发业务逻辑,不想每次新建后台服务的时候花太多时间在项目结构,服务安装,调度处理上。
最简单的用法就是,把代码下下来后,直接用vs打开。参照task的例子去写逻辑就ok了。
框架本身实现了
1.服务安装
框架本身是使用Topshelf进行服务安装,可以设置名称和描述,安装后直接可以在,这些都可以直接配置在app.config中
2.任务控制
框架提供了一个基类:ServiceBase,基类里面实现了 任务休眠和调度
任务的控制都是通过:Config/ServicesConfig.json配置文件管理
代码下载下来后的结构如下:
下面将使用框架创建一个每隔一分钟ping一次baidu.com的任务
1.在Services项目的Tasks文件夹中新建一个类 PingTask 继承于ServiceBase
2.PingTask实现Exec方法,在方法中实现ping逻辑 代码如下
using Services.Common; namespace Services.Tasks
{
class PingTask : ServiceBase
{
protected override void Exec()
{
ExecCmd("ping baidu.com");
} private void ExecCmd(string cmd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
//向cmd窗口发送输入信息
p.StandardInput.WriteLine(cmd+"&exit");
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待程序执行完退出进程
p.Close();
LogFactory.GetLogger().Info(string.Format("执行命令:{0}; 执行结果:{1}", cmd, ""));
}
}
}
3.在Config/ServicesConfig.json中添加配置节点
[
{ //每隔一分钟ping一次baidu.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": //间隔时间 单位秒
}
]
4.在App.config修改服务名称和描述
<appSettings>
<add key="ServiceName" value="PingService" />
<add key="Description" value="每隔一分钟ping一次baidu.com" />
<add key="DisplayName" value="PingService" />
</appSettings>
5.服务安装(注意要在 Release下生成的才会创建服务 在 Program 可以修改)
a.修改Install.bat和UnInstall.bat 确保里面的服务名称和App.config中的ServiceName一致
b.运行Install.bat
c.打开服务管理器(win+R 输入 services.msc) 可以看到服务正在运行
一个最基础的服务就完成了,如果想在这个基础上开启多个ping服务,分别ping不同的地址
首先,修改PingTask代码 中的 ExecCmd("ping baidu.com"); 改为 ExecCmd(Config.Param);
代码如下
protected override void Exec()
{
ExecCmd(Config.Param);
}
修改 Config/ServicesConfig.json 节点 下面是同时ping baidu.com 和 qq.com 的2个任务
[
{ //每隔一分钟ping一次baidu.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": , //间隔时间 单位秒
"Param": "ping baidu.com" //自定义参数
},
{ //每隔一分钟ping一次qq.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": , //间隔时间 单位秒
"Param": "ping qq.com" //自定义参数
}
]
这里主要是利用Param参数进行传递需要执行的命令;
然后重启服务即可。
任务调度支持多种方式
0.按指定间隔时间执行
1.每天指定时间执行 每天一次
2.指定时间执行一次
3.每天指定开始和结束时间并且按照指定间隔时间执行
完整的配置参数
[
{ //全量配置 每天的 04点到06点执行,每次执行间隔60秒
"ServiceName": "ping baidu.com任务", //非空服务名称
"Assembly": "Services.exe", //非空程序集
"Methods": "Services.Tasks.PingTask", //非空执行类名 对应业务的类名
"ExecType": , //执行类型 ( 0:按指定间隔时间执行 1:每天指定时间执行 每天一次 2:指定时间执行一次 3.每天指定开始和结束时间并且按照指定间隔时间执行) 可空默认0
"S_Interval": , //间隔时间 单位秒 可空默认60
"M_Interval": , //间隔时间 单位分 可空默认0
"H_Interval": , //间隔时间 单位小时 可空默认0
"ExecDayTime": null, //ExecType为1时起效 每天指定时间执行 格式 HH:mm:ss 14:00:00 可空
"ExecDayStartTime": "04:00:00", //ExecType为3时起效 格式 HH:mm:ss 14:00:00 可空
"ExecDayEndTime": "06:00:00", //ExecType为3时起效 格式 HH:mm:ss 14:00:00 可空
"ExecTime": null, //ExecType为2时必填 指定时间执行一次 datetime yyyy-MM-dd HH:mm:ss 执行一次后结束
"Param": "ping baidu.com" //自定义参数
}
]
框架代码路径:框架代码
简单的.NET后台定时服务框架的更多相关文章
- 使用Quartz Job 简单的做一个定时服务
第一步:创建一个windows服务 第二步:通过NuGet 安装Quartz (我搜索了Quartz 关键字 安装了 ) 第三步 代码部分 任务类 如 多个任务 就多几个类 public class ...
- .Net Core 分布式微服务框架介绍 - Jimu
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...
- 微服务框架 ketchup 介绍
1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...
- YoyoGo微服务框架入门系列-基本概念
前言 Github开源:github.com/yoyofx/yoyogo 还请多多Star 之前简单介绍了YoyoGo微服务框架的基本内容,接下来了解下框架中的基本概念. 从一个简单Web服务Demo ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
随机推荐
- linux下mysql重置密码
如果忘记mysql的root密码可以采取下面的步骤重新设置 1.kill掉所有mysql的进程 2.使用--skip-grant-tables的参数启动mysql shell> mysqld_s ...
- 高CPU、数据库无法读写的真凶
有兴趣的同学可以参考如下系列文章,都是针对dump分析的实战和总结: Windbg DUMP分析(原创汇总) http://www.cnblogs.com/LoveOfPrince/p/6653341 ...
- ionic 项目中创建侧边栏的具体流程分4步简单学会
这是在学习ionic时,当时遇到的一些问题,觉得很难,就记笔记下来了,现在觉得如果可以拿来分享,有可能会帮助到遇到同样问题的人 ionic slidemenu 项目流程: cd pretices(自己 ...
- Css实现一个简单的幻灯片效果页面
使用animation动画实现一个简单的幻灯片效果. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- [USACO4.2]草地排水Drainage Ditches
题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草 要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹 ...
- docker registry私有仓库部署
私有仓库服务端:12.40[root@centos7_golang ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- 如何远程调试zookeeper集群
我们在阅读一些源码的时候,如果能调试源代码将会大大的提高我们的阅读效率.最近在学习zookeeper源码,分享下如何调试zookeeper集群. zookeeper代码,调试环境搭建 1.下载zook ...
- thinkphp带查询条件的分页
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 【Android Developers Training】 99. 获取联系人详细信息
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...