• windows服务+定时任务(quartz.net)+nancy


    需求一:软件要能在操作系统启动后,自动运行
    因为操作系统是windows 10,所以最先想到的是windows服务,因为windows服务有个自动启动选项,设为true就行了。
    .net做这个最合适了,可以建windows服务项目。


    需求二:包含N个任务,要求每天、每周、每月都可以执行,时间可自己设置
    面对这个需求,很明显Timer不适合了,最先想到的便是Quartz.net,因为这个东西之前也用过,所以就用它了。满足需求绰绰有余。
    有一点需要说明的是,具体时间是保存在数据库里面的,服务在从数据库读取到时间后,还需要将设置的时间转换成cron表达式。


    需求三:领导说你能在这个windows服务里面提供web api吗?这样就不用单独的再创建一个接口项目了。
    一开始想用HttpListener自己写个简单的http web服务器,毕竟接口就一个。
    但是后来想到这种东西应该有别人写好的吧,所以就百度了下,发现Nancy比较合适。使用它可以监听指定端口,提供web服务。
    而且,我是通过job将最终需要执行的消息放在队列里面,然后去消费队列。没有用第三方的队列,用的是ConcurrentQueue。
    所以如果另外建web项目,就属于两个不同的项目,没办法消费队列了。


    注意:在服务停止后,需要关闭后台运行的线程,不然服务虽然停止了,但是未执行完的代码依然还会执行。

            /// <summary>
            /// 关闭相关后台线程,使得服务结束时,线程也关闭
            /// </summary>
            protected override void OnStop()
            {
                //关闭quartz
                if (!_scheduler.IsShutdown)
                {
                    _scheduler.Shutdown();
                    _logger.Info("quartz scheduler has shutdown");
                }
    
                //关闭http server
                if (_nancyHost != null)
                {
                    _nancyHost.Stop();
                    _logger.Info("http server has stoped");
                }
    
                //关闭socket检测
                this._checkSocketTimer.Dispose();
                _logger.Info("_checkSocketTimer has disposed");
            }

    特此记下解决方案,以备后用。

  • 相关阅读:
    进程二
    高德地图api的使用
    《架构即未来》读后感3
    三周总结
    性能战术:
    二周总结
    《 架构即未来》读后感2
    一周总结
    《架构即未来》读后感
    学生信息系统dao层
  • 原文地址:https://www.cnblogs.com/subendong/p/12093267.html
Copyright © 2020-2023  润新知