zoukankan      html  css  js  c++  java
  • 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");
            }

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

  • 相关阅读:
    pid系统控制算法
    pandas+numpy 对df数据中的某列进行等分分桶操作
    pandas学习
    angular6 数组遍历项进行双向绑定 丢失焦点 问题解决
    TypeScript 之构造器 constructor 方法 methods
    公开便民信息网站收集
    C++11_线程池
    百度网盘信息
    【赵强老师】MongoDB中的索引(下)
    TDSQL 4001 备份故障处理案例
  • 原文地址:https://www.cnblogs.com/subendong/p/12093267.html
Copyright © 2011-2022 走看看