简单的.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 架构在大并发的演进过程更简单 ...
随机推荐
- Delphi使用Zint生成QR二维条码(zint.dll)
Delphi使用Zint生成QRCODE 本文使用的Zint Barcode Library(zint.dll)版本为2.6.0,和之前使用的2.4.3版本在zint_symbol这个结构体上会有差异 ...
- JavaScript 函数(方法)的封装技巧要领及其重要性
作为一枚程序猿,想必没有人不知道函数封装吧.在一个完整的项目开发中,我们会在JS代码中对一些常用(多个地方调用)的操作进行一个函数的封装,这样便于我们调试和重复调用,以致于能够在一定程度上减少代码的冗 ...
- winserver2008r2 + iis7安装django
同样网上看了无数教程,但总是这个错一点那个错一点点的结果就一直没成功然后逞着今天空了那么一下午下定决定再折腾下把django跑起来,解决了静态文件问题为了方便以后复制粘贴,就全文字,嘿嘿 废话不说,接 ...
- python os模块学习
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是wi ...
- ipython及Python初体验
阅读目录: Python环境体验 Python编辑器 ipython安装 Python提示符 Python初体验 print和变量 变量操作 内建函数:方法 数学运算:简单算术.随机数 关于模块 一. ...
- Mac系统占用空间大、空间不够、查看系统文件大小分布
最近电脑老提示空间不够,甚是心烦,决定研究下,为啥空间这么快就花完了. 如图,256的空间,就剩下几个G了,其中最大头的系统占用:160G,占比60%多,我勒个擦... 正常情况下:我们可以点击管理, ...
- 主要排序算法的Java实现
最近温习算法,花点时间写了点代码验证下,在这里做个存档. package com.chrischeng.hacker; import java.util.*; /** * Created by Yex ...
- 2~62位任意进制转换(c++)
进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最 ...
- Kubernetes服务之StatefulSets简介
StatefulSets在v1.5时还是个beta特性,它取代了v1.4的PetSets特性.PetSets的用户可以参考v1.5的升级指导,将正在运行的PeetSets升级到StatefulSets ...
- 通过ant-jmeter读取jtl文件拆分数据并insert DB
前言:之前详解过通过jmeter生成的csv文件,解析csv存入DB,这个有弊端 第一:需独立创建一个job 第二:需按照一定规范输出 因此,放弃解析csv方式,直接解析自动化生成的原始jtl文件并集 ...