同步操作将从 车江毅/TaskManager 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
##分支说明##
该分支是基于BSF的基础上开发的分支。
修改内容
1)sdk以插件的形式扩展自BSF。
2)项目命名空间从Dyd.BaseService.TaskManager修改为TaskManager
3) 打包安装包,可以直接被第三方安装使用。
4)旧版本XXF.dll,则使用master分支
直接使用**“任务调度平台安装”**下的安装包直接安装试用。
5)【新】增加redis内部即时通知功能,优化web与节点之间的通信。
6)【新】增加共享配置功能,所有任务都可以共享使用这些配置。
7)【新】节点监控任务未运行出错,导致持续报错bug。
##无法编译的问题##
git下载源码后部分开发人员无法编译的问题(挺诡异的问题),可以按照以下两种方式尝试解决:
1)改成.net 4.5 framework 再试试。
2)直接下载BSF源码进行编译
用于.net dll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等。
平台基于quartz.net进行任务调度功能开发,采用C#代码编写, 支持corn表达式和第三方自定义的corn表达式扩展。
架构以插件形式开发,具有良好的功能扩展性,稳定性,简单性,便于第三方开发人员进一步进行功能扩展。
支持多节点集群,便于集群服务器的资源有效分配,任务的相互隔离。
支持邮件形式的错误预警,便于运维及时处理任务异常等。
-- 车江毅 2015-06-17
####(相关文档,请参考master分支,但master分支相对来说是比较旧的版本分支)####
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dyd.BaseService.TaskManager.Demo { /// <summary> /// 任务调度平台 任务插件的写法demo及说明 /// </summary> public class DemoTask : XXF.BaseService.TaskManager.BaseDllTask { /// <summary> /// 任务调度平台根据发布的任务时间配置,定时回调运行方法 /// 开发人员的任务插件必须要重载并该方法 /// </summary> public override void Run() { /* * this.OpenOperator 用于任务调度平台提供给第三方使用的所有api接口封装 */ /*获取当前任务dll安装目录*/ this.OpenOperator.GetTaskInstallDirectory(); /*打印一条日志到任务调度平台,因为日志会存到平台数据库,所以日志要精简,对任务出错时有分析价值【注意:不要频繁打印无用的,非必要的,对分析无价值的日志信息】*/ this.OpenOperator.Log("这里打印一条日志到任务调度平台"); /*打印一条错误到任务调度平台,因为日志会存到平台数据库,所以日志要精简,对任务出错时有分析价值【注意:不要频繁打印无用的,非必要的,对分析无价值的日志信息】 *后续任务会有增加优先级区分,根据任务的优先级,错误的出现频率等,错误日志会定期推送到开发者邮箱和短信*/ this.OpenOperator.Error("这里打印一条错误日志到任务调度平台", new Exception("错误msg信息")); /*从数据库获取任务的临时数据,临时数据以jason的形式保存在数据库里面,便于任务上下文的恢复和信息传递【注意:不应用于"频繁的"存储"大量的"临时数据,会操作网络耗时和数据库性能差】*/ var databasetempinfo = this.OpenOperator.GetDataBaseTempData<DemoTaskDatabaseTempInfo>(); if (databasetempinfo == null)//若任务第一次运行,可能没有临时数据。当然也可以在发布任务的时候配置临时数据也可。 { databasetempinfo = new DemoTaskDatabaseTempInfo(); databasetempinfo.LastLogID = 0; } /*将任务的临时数据持久化到数据库中,临时数据以json的形式保存在数据库里面,便于任务上下文的恢复和信息传递【注意:不应用于"频繁的"存储"大量的"临时数据,会操作网络耗时和数据库性能差】 若临时数据用于下一次使用,必须要执行此方法,否则下次无法获取【注意:执行此方法,当前临时数据有可能被重置为null,便于内存资源释放】*/ this.OpenOperator.SaveDataBaseTempData(databasetempinfo); /*从本地安装目录中获取任务的临时数据,临时数据以jason的形式保存在本地,便于任务上下文的恢复和信息传递【注意:本地临时数据一般用于保存"大量的"临时数据】*/ var localtempinfo = this.OpenOperator.GetLocalTempData<DemoTaskLocalTempInfo>(); if (localtempinfo == null)//若任务第一次运行,可能没有临时数据。当然也可以在发布任务的时候上传临时数据json至安装压缩包中也可。 { localtempinfo = new DemoTaskLocalTempInfo(); localtempinfo.file = new byte[0]; } /*将任务的临时数据持久化到本地安装目录中,临时数据以json的形式保存在本地安装目录里面,便于任务上下文的恢复和信息传递【注意:本地临时数据一般用于保存"大量的"临时数据】 若临时数据用于下一次使用,必须要执行此方法,否则下次可能无法获取【注意:执行此方法,当前临时数据有可能被重置为null,便于内存资源释放】*/ this.OpenOperator.SaveLocalTempData(localtempinfo); { string msg = "执行业务中...."+ this.AppConfig["sendmailhost"]; Debug.WriteLine(msg); System.IO.File.AppendAllText(this.OpenOperator.GetTaskInstallDirectory()+"业务.txt", msg); } } /// <summary> /// 开发人员自测运行入口 /// 需要将项目配置为->控制台应用程序,写好Program类和Main入口函数 /// </summary> public override void TestRun() { /*测试环境下任务的配置信息需要手工填写,正式环境下需要配置在任务配置中心里面*/ this.AppConfig = new XXF.BaseService.TaskManager.SystemRuntime.TaskAppConfigInfo(); this.AppConfig.Add("sendmailhost", "smtp.163.com"); this.AppConfig.Add("sendmailname", "fengyeguigui@163.com"); this.AppConfig.Add("password", "******"); base.TestRun(); } } /// <summary> /// 任务调度平台之临时数据信息,用于任务上下文的信息传递。 /// 将会以json形式保存在任务调度平台数据库中,便于下一次回调运行时恢复并使用。【注意:不应用于"频繁的"存储"大量的"临时数据,会操作网络耗时和数据库性能差】 /// </summary> public class DemoTaskDatabaseTempInfo { public int LastLogID { get; set; } } /// <summary> /// 任务调度平台之临时数据信息,用于任务上下文的信息传递。 /// 将会以json形式保存在任务调度平台本地安装文件夹中,便于下一次回调运行时恢复并使用。【注意:本地临时数据一般用于保存"大量的"临时数据】 /// </summary> public class DemoTaskLocalTempInfo { public byte[] file { get; set; } } }
##.net 开源第三方开发学习路线 ##
.net 生态闭环:官方开源项目->第三方参与学习->第三方改进并提交新功能或bug->官方合并新功能或bug->官方发布新版本
为什么开源? .net 开源生态本身弱,而强大是你与我不断学习,点滴分享,相互协助,共同营造良好的.net生态环境。
开源理念: 开源是一种态度,分享是一种精神,学习仍需坚持,进步仍需努力,.net生态圈因你我更加美好。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。