基于Coravel定时任务之物联网设备数量统计

1 应用背景

在物联网系统中,需要计算底端所有设备的总数,显示在Dashboard中,进行一个总数的显示。包括离线,告警,停运等等数据都需要对应的总数的统计显示。

2 对比各家定时库

2.1 TaskScheduler

TaskScheduler库只支持.net,且需要结合windows任务计划程序来调用,pass。

2.2 Fluent Scheduler

Fluent Scheduler只支持.net,pass。

2.3 Quartz.net

本身框架太重,而且使用复杂,pass。

2.4 Hangfire

相对Quartz轻量很多,使用也简单,而且有网页可以访问来观察任务执行情况,但是有一个致命的缺点就是只能支持分钟及以上的定时任务处理原因在于Hangfire用的是开源的NCrontab组件,跟linux上的crontab指令相似。在本应用中,总页数在1分钟之后更新,无法忍受。pass

hangfire 7.0 以上版本已经支持 Cron 表达式和秒级时间粒度了

在此感谢网友 @ Name="Jaly"

2.5 Coravel

框架轻,使用简单,支持秒级定时任务。Coravel Pro可以连接数据库进行任务调度,Coravel Pro可以支持web可视化,将任务执行情况通过web显示出来。适合本应用背景。

3 Coravel的一般使用

3.1 Nuget安装

在调用类库层安装Coravel。

3.2 依赖注入

在startup.cs中的ConfigureServices方法中进行依赖注入

services.AddScheduler();

3.3 配置调度器

在startup.cs中的Configure方法中配置链两个定时任务

  var provider = app.ApplicationServices;
provider.UseScheduler(scheduler =>
{//配置任务1方法
scheduler.Schedule(() => Console.WriteLine("Every second during the week."))
//工作日每隔1秒输出
.EverySecond()
.Weekday();
});
provider.UseScheduler(scheduler =>
{//配置任务2方法
scheduler.Schedule(() => Console.WriteLine("Every 5 second during the week."))
//工作日每隔5秒输出
.EverySeconds(5)
.Weekday();
});

3.4 运行程序,观察输出

从上图结果中可以看到任务1每隔1秒打印输出;任务2每隔5秒打印输出,正确。

3.5 Cron 表达式

Coravel 支持Cron Expressions,有需要的可以根据应用场景设置Cron表达式

  • * * * * * run every minute
  • 00 13 * * * run at 1:00 pm daily
  • 00 1,2,3 * * * run at 1:00 pm, 2:00 pm and 3:00 pm daily
  • 00 1-3 * * * same as above
  • 00 */2 * * * run every two hours on the hour

3.6 错误支持

Coravel 发布于2018年6月28日,才刚起步还不成熟,我在调试工作日秒级定时任务的时候会报错。

详见#91 https://github.com/jamesmh/coravel/issues/91

作者在几小时内利用工作时间,解决了问题,还发布到nuget2.5.1。很是感动。

3.7其他功能支持

此外,Coravel还支持任务队列,缓存,事件组播,邮件等。任务队列可依据读者使用情况,视情况另起一篇,缓存不建议用此组件,可用Easycache。事件组播亦不建议用此库,可参考 https://www.cnblogs.com/JerryMouseLi/p/11012839.html。 邮件亦不建议用此组件。

3.8 Coravel Pro

Coravel Pro可以连接数据库进行任务调度,Coravel Pro可以支持web可视化,将任务执行情况通过web显示出来。在这里不做详细介绍,有需要的读者可自行研究。

4 Coravel的松耦合使用(含总页数统计)

4.1 依赖注入自定义类

ConfigureServices中对松耦合的类Statistic进行依赖注入

 services.AddTransient<Statistic>();

4.2配置调度器

在startup.cs中的Configure方法中配置自定义松耦合任务

    var provider = app.ApplicationServices;
provider.UseScheduler(scheduler =>
{
scheduler.Schedule<Statistic>()
.EverySecond()
.Weekday();
});

4.3 编写松耦合任务的代码

详细说明,见代码注释。

using Coravel.Invocable;//需要引用此类库来进行自定义任务
using IBMS.Infrastruct.UoW;
using System;
using System.Threading.Tasks; public class StatisticTask: IInvocable
{
private readonly IStatisticsServices _statisticsServices;
private readonly IIPBoxServices _iPBoxServices; public StatisticTask(IStatisticsServices statisticsServices, IIPBoxServices iPBoxServices,)
{
_statisticsServices = statisticsServices;
_iPBoxServices = iPBoxServices;
}
public async Task Invoke()
{
var _ipboxCount = await _iPBoxServices.CountAsync();//查询设备总数 var response = await _statisticsServices.GetAsync(1);//统计表取出
response.IpboxTotal = (int)_ipboxCount;//存入统计表缓存 await _statisticsServices.UpdateAsync(response);//更新统计表 } }

注意:1.编写的任务一定要在 Invoke中,这属于固定格式;public async Task Invoke() {};2. 需要引入以下库:using Coravel.Invocable;

5. 结果验证

5.1 前端显示总数数据库记录总数相等,并且数据可以实时更新。

6 其他

计算总设备总页数的计算可以在每次查询时生成,如下

var IPBoxCount =  _unitOfWork.IPBoxRepository.Count();
return Json(new { pageModel, IPBoxCount });

7 小结

这里需要VUE前端以Axios形式来定时获取统计表,后续会改成后端Coravel定时计算好之后,以SignalR形式主动推送到前端进行总览显示。

本文主要推荐Coravel这个定时工具的使用,让Coravel这个优雅的工具被更多人知晓使用。


基于Coravel定时任务之物联网设备数量统计的更多相关文章

  1. 安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备

    安天透过北美DDoS事件解读IoT设备安全 安天安全研究与应急处理中心(安天CERT)在北京时间10月22日下午启动高等级分析流程,针对美国东海岸DNS服务商Dyn遭遇DDoS攻击事件进行了跟进分析. ...

  2. 基于Python实现的系统SLA可用性统计

    基于Python实现的系统SLA可用性统计 1. 介绍 SLA是Service Level Agreement的英文缩写,也叫服务质量协议.根据SRE Google运维解密一书中的定义: SLA是服务 ...

  3. 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式

    随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全.   大家是否 ...

  4. 阿里云重磅推出物联网设备身份认证Link ID²

     2018年12月19日,阿里云宣布推出新版物联网设备身份认证Link ID²及物联网安全运营中心Link SOC,护航万物智联.   随着越来越多的设备连接到网络中,随之而来的安全问题越来越突出. ...

  5. 腾讯IOT之树莓派物联网设备

    目录 腾讯IOT之树莓派物联网设备 硬件配置 软件配置 Tecent IOT 开发平台的使用 新建项目 新建产品 添加自定义功能 设备开发 微信小程序配置 面板配置 新建设备 使用设备 在线调试 设备 ...

  6. 如何用webgl(three.js)搭建处理3D隧道、3D桥梁、3D物联网设备、3D高速公路、三维隧道桥梁设备监控-第十一课

    开篇废话: 跟之前的文章一样,开篇之前,总要写几句废话,大抵也是没啥人看仔细文字,索性我也想到啥就聊啥吧. 这次聊聊疫情,这次全国多地的疫情挺严重的,本人身处深圳,深圳这几日报导都是几十几十的新增病例 ...

  7. 消息队列数量统计(MSMQ,Performance Counter)

    微软消息队列服务MSMQ (Microsoft Message Queue),工作在在线或者离线场景,并提供异步编程功能.互联网和企业开发很多场景应用,例如电商的订单处理流程,这是因为客户端不需要等待 ...

  8. Robotframework自动化系统:筛选结果数量统计

    Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...

  9. Robotframework自动化系列:筛选结果数量统计

    Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...

随机推荐

  1. unity_数据结构(常见数据结构及适用场景)

    常见的数据结构: 1.Array: 最简单的数据结构 特点:数组存储在连续的内存上.数组的内容都是相同类型.数组可以直接通过下标访问.优点:由于是在连续内存上存储的,所以它的索引速度非常快,访问一个元 ...

  2. unity_小功能实现(敌人巡逻功能)

    利用NavMeshAgent控制敌人巡逻,即敌人在一组位置间循环巡逻. 首先我们要知道NavMeshAgent中有两个方法:1.锁定当前巡逻的某一目标位置,即navMeshAgent.destinat ...

  3. 【原创】Linux PSCI框架

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  4. 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。(二) 设置后台管理界面

    昨天提到了,由于vop商品池未开通,故对接工作只能暂缓,现在要做一个专门针对vop商品的后台管理, 老规矩,先上设计链路图 因为后台本来就是有比较完善的商品管理系统, 所以我们只是针对vop 进行简单 ...

  5. JMeter特点&性能测试工具选型的原则&模拟压力的原理

    1.JMeter自身的特点 1)开源.轻量级.更适合自动化和持续集成(100M左右,LoadRunner 4G左右) 2)学习难度大 3)资料少.全英文 2. 性能测试工具选型的原则 1)成本 a.工 ...

  6. LuoGu-P2863牛的舞会The Cow Prom[tarjan 缩点模板]

    传送门:https://www.luogu.org/problemnew/show/P2863 思路:tarjan模板题,之前会的tarjan,一直想学缩点到底是什么操作,发现就是把同组的放在一个数组 ...

  7. codeforces 828 D. High Load(思维,水题)

    题目链接:http://codeforces.com/contest/828/problem/D 题解:任意去一个点为根然后有几个k就是几个子叶也就是根结点有几个分支然后最好的解法就是贪心,将剩下的点 ...

  8. CodeForces 758 C Unfair Poll

    Unfair Poll 题意:一共有n排同学每排同学有m个人, 老师问问题有一个顺序, 先从第一排开始问,问完第一排的所有同学之后,再问第2排的,对于所有排的访问顺序为 1,2,3……n-1,n,n- ...

  9. hdu 4722 Good Numbers 规律 数位dp

    #include<iostream> #include<cstring> #include<cstdio> #include<vector> #incl ...

  10. JS-DOM ~ 02. 隐藏二维码、锁定、获取输入框焦点、for循环为文本赋值、筛选条件、全选和反选、属性的方法操作、节点的层次结构、nodeType

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...