基于Quartz.NET 的雨情监测报警程序开发
2021-11-15李淑静卿光勇王锡良
李淑静,卿光勇,王锡良
(1.黑水县气象局,四川 黑水 623500;2.阿坝州气象局,四川 马尔康 624000)
气象服务是指气象部门基于大气科学的理论与技术,根据社会、经济、军事、生态、防灾减灾等需要,向社会提供的各类工作[1,2]。气象服务是政府公共服务体系的重要组成部分[3],也是中国气象事业的立业之本[4-7]。中国的气象服务体系由决策气象服务、公众气象服务、专业专项气象服务和气象科技服务构成[8-10]。决策气象服务的目的是在第一时间让党政领导和决策部门获得科学、准确、及时和有决策参考价值的气象信息[11,12]。其中,对突发性灾害性的短时强降水的预报预警气象服务的及时性要求更高,也是最重要的[13,14]。在汛期,及时的实时雨情信息服务可以为决策部门防灾减灾赢得宝贵时间。
四川省三级预报业务平台[15]Web 服务器,提供了全省范围内气象站的雨情信息,工作人员可以通过该平台查询某区域范围内指定时间段内的雨情数据,当发现某气象站的降水量达到或超过规定的阈值时,就必须立刻对灾害应急等决策部门做实时的雨情服务,供决策部门参考,为保护人民群众的生命财产安全做出提前的灾害预警。在三级预报业务平台的前端页面,从降水数据的统计时间段、气象站所属的行政区域范围的选择,到将查询出来的雨量数据导出到Excel格式的文档中进行后续处理,都需要手工操作,流程繁琐、效率低。更重要的是,这样的人工不定时操作达不到及时掌握各地降水量实况大小的目的。如果用软件来实现对降水数据的实时监测,及时报警,将极大地减轻值班人员的工作强度,提高工作效率。
1 技术方法
实现软件对三级预报业务平台Web 服务器上的降水量数据进行监测,也就是用编程来模拟浏览器访问该Web 服务器时得到降水数据的全过程。在这一过程中,使用谷歌浏览器Chrome 开发者工具[16-18]对客户端和服务器之间的交互信息进行侦测,得到开发软件所需的各种信息,包括客户端需要向服务器提供什么样的参数和数据、请求资源时采用什么样的方法,以及从服务器返回客户端的数据格式等。基于Quartz.NET[19-22]开发雨情监测报警程序,配合Aspose.Cells for .NET 自动生成决策气象服务所需的Excel格式的雨情通报文档[23,24]。
1.1 Chrome 开发者工具
Chrome 开发者工具是一套内置于谷歌浏览器Chrome 中的Web 开发和调试工具,可用来对网站进行分析、调试和迭代。该工具包含了Elements、Con⁃sole、Sources、Network、Performance、Memory 等面板。当浏览器向服务器发起页面请求后,Network 面板将记录客户端和服务器之间详细的网络请求和应答信息,包括请求的状态、资源的大小、类型、耗费时间、Request请求和Response 响应等。
1.2 Quartz.NET
Quartz.NET 是一个开源、轻量、功能强大的作业调度框架,是Java 作业调度系统Quartz 在.Net 平台的实现,能够用它来为执行一个作业而创建简单的或复杂的作业调度,既能执行重复的作业任务,也支持指定例外的日历,从小型应用到大型企业级系统都能适用。它具有数据库支持、插件、集群、支持cron-like 表达式等特性,它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。
1.3 Aspose.Cells for.NET
Aspose.Cells for .NET 是.NET 平台下专业的电子表格控件,即使在没有安装Microsoft Excel 或Mi⁃crosoft office 的工作环境中,也能对XLS、XLSX、HT⁃ML、CSV、PDF 等格式的文件进行生成、编辑、转换等操作。允许软件开发人员从其自己的应用程序中操纵和转换电子表格文件,以及将电子表格呈现为各种图像和固定布局的文件格式。
2 雨情监测报警程序开发
2.1 雨情监测报警程序的运行原理
Quartz.Net 框架包括几个基本的概念:调度器(Scheduler)、被调度的任务类型(Job)、JobDetail(具体的可执行调度任务)和触发器(Trigger)。调度器是Quartz.NET 框架的核心,负责管理Quartz.NET 应用运行环境。Job 是作业的类型,描述了作业是如何执行的。JobDetail 是Job 的实例,它包含了该实例的执行所需要的数据。Trigger 用于定义任务调度的时间触发规则。
任务调度器在应用程序启动时被创建。实例化一个调度器工厂SchedulerFactory,通过GetScheduler()方法从调度器工厂里得到调度器实例Scheduler。创建Job 任务并实例化JobDetail,在创建Trigger 触发器后,JobDetail 和Trigger 注册到Scheduler 中,就可以被Scheduler 容器调度了。最后,根据触发器规划执行调度任务。在触发器被触发后,所有要完成的工作都在GetRainJob 作业中完成,该作业任务实现了IJob 接口的Execute 方法。实现雨量监测报警,并结合Aspose.Cells for .NET 自动生成雨情通报文档的功能都在该方法中完成(图1)。
图1 雨情监测报警程序运行原理
2.2 利用Chrome 开发者工具抓取客户端和服务器之间的交互信息
运行Chome 浏览器,打开Chrome 开发者工具,切换到Network 面板。在浏览器的地址栏输入并访问四川省气象局省市县三级预报业务平台在内网的网址:http://10.194.17.32/,此时,在开发者工具的请求列表中列出了侦测到的所有资源,包括网址、图片、json 等相关信息。点击该列表左边的Name 列中和该平台相关的网址,在右侧的Headers 标签页中显示了和该资源相关联的HTTP 标头信息,包括请求的URL 地址、请求方法、请求状态、服务器返回客户端数据的类型等。在Response 标签页则显示了从服务器返回的HTTP 响应数据是XML 格式的文本。这些信息为开发雨情监测报警程序提供了依据(图2)。
图2 Chrome 开发者工具监测浏览器和服务器之间的通讯
2.3 雨情监测报警程序的开发步骤及关键代码
建立.NET 项目,在工程中添加对Quartz.dll 和Aspose.Cells.dll文件的引用,并引入命名空间:
为了实现对任务的调度,在程序启动时就需要基于Quartz.NET 框架,实例化并启动调度器Sched⁃uler,在创建触发器Trigger 和Job 任务并实例化Job⁃Detail后,与调度器相关联。代码如下。
在GetRainJob 作业的Execute 方法,实现了降水数据监测报警和雨情通报文档的自动生成。模拟浏览器向服务器发起请求的主要代码如下。
软件最终生成的Excel 格式雨情通报文档(部分)如图3 所示。
图3 Excel格式的雨情通报文档
3 小结
在浏览器访问省市县三级预报业务平台查询降水数据时,利用Chrome 开发者工具抓取客户端和服务器之间详细的请求和应答信息,为开发基于Quartz.NET 的雨情监测报警程序提供了依据。该程序不但能实时监测特定时间段、特定区域范围内各个气象站的累计降水量数据及时报警,而且还能结合Aspose.Cells for .NET 实现雨情通报文档的自动化生成,极大地减轻了工作人员的劳动强度,提高了工作效率,其高效、及时和自动化的优势在汛期繁重的气象服务工作中发挥了重要的作用。
该程序还可以结合实际的工作需要,对其功能进行扩展开发。比如,结合电信网关和微信,向相关决策部门自动发送实时雨情手机短信,并在微信平台同步发布,以进一步发挥其自动、及时、高效的优势在气象服务工作中的作用。