基于Push—Model的遥感生态产品生产监控的设计与实现

点赞:12509 浏览:48029 近期更新时间:2024-03-22 作者:网友分享原创网站原创

摘 要: 针对生态环境遥感产品生产系统的架构,结合遥感生态产品的特点,提出了以多线程方式为运行机制的Push-Model的产品生产监控系统,用以实时、有效地对产品生产过程进行进度监控和人工交互消息的控制.生产监控系统的实现与运行,证实了该方案下产品生产监控信息的实时性及人工交互消息控制的有效性.

关 键 词 : Push-Model; 生态产品; 消息控制; 生产监控

中图分类号:TP399 文献标志码:A 文章编号:1006-8228(2014)03-20-04

0 引言

近年来,卫星遥感应用作为我国太空经济的重要组成部分,在解决我国经济社会发展中的资源环境瓶颈问题、防灾减灾和生态建设方面,显示出越来越重要的作用.为实现我国环境大范围、全天候、全天时的动态监测,建立业务化的国家环境监测体系,满足我国环境与灾害监测预报小卫星星座的要求,国家环境保护部提出了环境与灾害监测预报小卫星星座环境应用系统软件工程.生态环境遥感产品生产系统是环境应用系统的主要组成部分之一.

在生态环境遥感产品生产系统中,监控系统作为其重要组成部分,不仅对生产过程进行进度监控,而且为人工交互消息的控制提供操作接口.监控消息的获取模式有多种,其中Push模式有实时推送、无缝连接及安全性等多方面的特点[1],并在WAP、Android、网络数据分发等方面有优越的应用[2-8].为了保证监控客户端能实时地查看进度信息,在生产怎么写作器端使用了Push模式来推送进度信息.本文结合遥感生态产品生产的实际需求,根据Push模式的特点,设计出的监控系统在实际应用过程中能很好地满足项目需求.

1.遥感生态产品生产监控的系统模型

基于Push-Model的遥感生态产品生产监控系统的部署架构如图1所示.

图1 遥感生态产品生产监控系统部署架构图

遥感生态产品生产系统由多台生产怎么写作器、调度怎么写作器客户端组成,监控系统作为其中的一个逻辑子系统贯穿于整个生态产品生产系统中.

生产怎么写作器(ParaServer) 由于遥感生态产品数据多、数据所含的信息量大,系统处理遥感生态产品采用的算法仍为IDL(Interactive Data Language)语言所写,生产怎么写作器驱动遥感生态产品算法进行生产,在产品生产过程中,算法将执行过程的进度向生产怎么写作器上报,生产怎么写作器将进度组装成进度消息推送给调度怎么写作器.对需要人工交互的产品,生产怎么写作器根据监控客户端的操作来控制产品的生产过程及产品结果的质量.

调度怎么写作器(DispatchServer) 调度怎么写作器在监控系统中作为一个中间层部件存在,怎么写作启动后,开放端口循环监听连接请求,同时该怎么写作器维护生产怎么写作器和监控客户端两个队列.启动生产怎么写作器和监控客户端后,调度怎么写作器分别把其加入生产怎么写作器队列和监控客户端队列.生产怎么写作器和监控客户端有消息交互时,调度怎么写作器负责该交互消息的转发.

监控客户端(MonitorClient) 监控客户端为监控系统提供直观的进度消息展示,并为人工交互控制生产过程提供界面操作接口,人工交互控制的选择有制图、简报制作和归档三种类型.

在下文中我们用ParaServer代表生产怎么写作器,DispatchServer代表调度怎么写作器,MonitorClient代表监控客户端.

2.遥感生态产品生产监控系统设计

从遥感生态产品的实际特点考虑,系统对非人工交互和人工交互两类产品分别进行处理.这两类产品的消息传递方式是一致的,不同的是人工交互产品需要人工通过MonitorClient对产品生产过程进行干预.

2.1 基于Push-Model的消息传递

ParaServer的算法驱动引擎驱动生态产品算法生产,产生进度值,最后把组装的进度消息推送给DispatchServer,DispatchServer转发给MonitorClient.由于MonitorClient在产品生产开始至结束这个时间段内,并不是一直在线(即连接在DispatchServer上),为了让MonitorClient能准确连续地监控产品生产的进度,在ParaServer中添加了一个进度缓存器.ParaServer对新的进度消息Push之后,判断当前的订单是否完成生产,若已完成,则清空当前订单的进度缓存;否则,把进度消息存入当前订单的进度缓存中.

ParaServer中消息推送机制如图2所示.

[算法驱动引擎][生态产品算

法生产产生

进度值][接收进度值][组装成进度消息][Push] [ParaServer][当前订单是

否生产完成] [Push之后] [是][清空][进度缓存][积累] [否] [转发] [过程1][过程2] [DispatchServer] [接收消息,

解析展示][Send][MonitorClient]

图2 ParaServer中消息推送机制

过程1表示MonitorClient在线时,ParaServer实时推送进度消息.

过程2表示MonitorClient在产品生产开始后至生产完成这个时间段内在线的前期进度消息获取过程.为了MonitorClient得到完整的进度消息,进度缓存一次性地把历史进度消息推送给MonitorClient,获取历史进度消息后,对新的进度消息,MonitorClient仍然遵从过程1的流程,即直接由ParaServer的算法驱动引擎Push进度消息.

2.2 利用队列的人工交互消息控制 在人工交互消息控制过程中,当两个以上的MonitorClient接收到同一个订单的人工交互产品时,ParaServer采用的控制策略为先到先处理.ParaServer中维护了一个生产订单状态队列,在与MonitorClient进行人工交互的过程中,根据人工交互消息调整状态队列中对应的订单状态.虽然人工交互的类型有多种,但是控制的流程是一致的.本例以制图为例,来说明人工交互消息的控制流程.如图3所示,消息a表示等待人工制图消息,消息b表示该订单正在人工制图的消息,消息c表示开始人工制图的消息,消息d表示制图结束消息,为了突出ParaServer与MonitorClient的消息流通及控制过程,图3中省略了DispatchServer转发.

图3 人工制图消息的流程

人工制图消息的流程说明:

第一步,ParaServer的生产过程中止,等待人工制图,修改生产订单状态队列中订单的状态;

第二步,通知MonitorClient,发送消息a;

第三步,MonitorClient接收并解析消息a,点击MonitorClient界面中的【人工制图】按钮,向ParaServer发送消息c;

第四步,ParaServer接收并解析消息c,锁定该订单,修改订单队列中订单状态,向MonitorClient发送消息b;

第五步,MonitorClient接收并解析消息b,并从ParaServer中下载人工制图需要的模板等文件;

第六步,在MonitorClient端,人工打开制图模块,开始人工制图;

第七步,人工制图操作结束,将制图结果上传到ParaServer中;

第八步,点击MonitorClient界面中的【制图完成】按钮,向ParaServer发送消息d;

第九步,ParaServer接收并解析消息d,修改订单队列中订单状态,人工制图流程结束.

在ParaServer中,人工制图过程结束后,自动转到下一个生产阶段,因此人工制图结束时不需要再向MonitorClient发送制图结束的消息.

2.3 多线程方式的运行机制

多线程方式作为一种多任务、并发的工作方式,有快速的响应能力、使CPU系统更加有效及改善程序结构等特点,应用范围广[9-11].本系统中需要对消息进行大量的接收、解析、转发处理,ParaServer端驱动生态产品算法生产,并将生产的进度推送出去,同时还接收并解析来自MonitorClient的人工交互控制的消息,这三种操作都是并行的.DispatchServer接收ParaServer与MonitorClient的连接并转发消息,这两种操作也是并行的.MonitorClient端实时监控生产进度,并在界面上展示,同时控制人工交互操作,这些任务都是并行的.因此为了满足系统对进度监控的实时性及人工交互消息控制的有效性要求,系统采用了多线程方式的运行机制.

这种多线程的运行机制贯穿于系统的整个运行过程,Paraserver中的多线程保证了Push-Model下进度能实时传递到DispatchServer,DispatchServer中的多线程方式又可靠地保证了转发给当前的MonitorClient.

基于Push—Model的遥感生态产品生产监控的设计与实现参考属性评定
有关论文范文主题研究: 关于消息的论文范例 大学生适用: 学校学生论文、硕士学位论文
相关参考文献下载数量: 55 写作解决问题: 怎么撰写
毕业论文开题报告: 标准论文格式、论文前言 职称论文适用: 刊物发表、高级职称
所属大学生专业类别: 怎么撰写 论文题目推荐度: 经典题目

3.遥感生态产品生产监控系统实现

消息是ParaServer、DispatchServer及MonitorClient通信的基础,本节先给出了系统中消息格式的约定,再分别介绍了消息传递和人工制图消息的控制.

3.1 消息格式约定

本系统底层采用的通信协议是TCP/IP协议[12].为了保证消息的正确解译,在系统的消息流通中,ParaServer、DispatchServer和MonitorClient约定了消息的格式.以下列举几个重要的消息,并详细解释其含义.

3.1.1 MonitorClient给DispatchServer的消息

消息1 开始监控消息

格式:BeginMonitor@orderNum#ParaServerIP

BeginMonitor:消息头,MonitorClient在启动监控时向DispatchServer发送此消息;

orderNum:订单号(数据库中的orderID)-子订单序号(数据库中的subOrderID);

ParaServerIP:这一项可以为空,在没有值的情况下,表示查询正在调度队列中的ParaServer;如果有值,则表示到该值所在的ParaServer查询生产进度信息.

消息2 制图消息

格式:ManualMapping@orderNum#*#*

ManualMapping:消息头,点击MonitorClient中【制图完成】时发送此消息;

orderNum:订单号(数据库中的orderID)-子订单序号(数据库中的subOrderID);

*:有两个取值,F或者E,F表示人工制图完成,所需文件已经上传;E表示人工制图文件上传失败;

*:根据第一个*的值来确定,当前一个参数为F时,为空;当前一个参数为E时,为上传失败的制图文件名.


消息3 人工制作简报消息

格式:ManualMakeReport@orderNum#*#*

ManualMakeReport:消息头,点击MonitorClient中【简报完成】时发生此消息;

orderNum:订单号(数据库中的orderID)-子订单序号(数据库中的subOrderID); *:有两个取值,F或者E,F表示人工制作简报完成,所需文件已经上传;E表示人工制作简报上传失败;

*:根据第一个*的值来确定,当前一个参数为F时,为空;当前一个参数为E时,为上传失败的简报文件名.

3.1.2 DispatchServer给MonitorClient的消息

消息4 回复开始监控单个任务的消息

格式:ReBeginMonitorOneTask@OrderNum#

ParaServerIP#PtpPort#PsgPort#IsOK

ReBeginMonitorOneTask:消息头,MonitorClient向DispatchServer发送BeginMonitorOneTask时发送消息;

OrderNum:订单号(数据库中的orderID)-子订单序号(数据库中的subOrderID);

ParaServerIP:生产该订单的ParaServer的IP地址;

PtpPort: ParaServer的Ftp端口号;

PsgPort: ParaServer的TCP通信连接端口号;

IsOK:取值True或False,True表示可以开始监控;False表示ParaServer不能正常反馈进度消息.

消息5 单个任务监控消息

格式:ReOneTaskInfoPS@ClientIP#

OrderNum#ProduceBeginOrEndTime#*#

Progress#OverallProgress#Time

ReOneTaskInfoPS:消息头,有新进度时PUSH此消息;

OrderNum:订单号(数据库中的orderID)-子订单序号(数据库中的subOrderID);

ClientIP:MonitorClient的IP地址;

ProduceBeginOrEndTime:当progress<100时,子阶段生产开始的时间;当progress=100,子阶段生产结束的时间;

*:表示在生产过程中执行的不同步骤的缩写字母,取值为D时表示数据解压,其他值有:V-数据验证、C-数据准备、P-开始生产、X-渲染、Z-制图、J-简报制作、Y-元数据生成、G-归档、F-生产结束、U-产品上传;

Progress:表示对应的每种情况的进度信息;

OverallProgress:任务总体进度;

Time:此子生产阶段的用时.

3.2 消息传递的可视化

为了直观地感知系统的消息过程,在MonitorClient端设计了一个系统消息的可视化区域.在此区域中,实时地详细记录系统在运行中传递的每一条消息.可视化界面如图4所示.消息传递实现的思想如下.

ParaServer中自定义类StaticQueue.cs来表示新消息产生时,消息的流动去向.类中首先维护一个订单状态的队列OrderStateList,其类型为由.Net类库提供的多线程同时访问的键值对的线程安全集合ConcurrentDictionary,参数类型为>.新消息产生时,立即通知(即是Push)当前所有正在监听该订单的MonitorClient,并且更新OrderStateList.若是OrderStateList中存在该消息对应的订单号,则直接更新OrderStateList;否则为OrderStateList添加一个新的键值对.当MonitorClient从生产过程中打开时,需要获取订单之前的状态,为此该类还提供根据订单号从队列中获取订单状态的方法.当订单的生产过程结束时,就从列表中移除其状态信息.

图4 进度消息的实时记录

ParaServer中产生消息后处理的核心代码由自定义的HelpTools类中NoticeAllClient方法实现.调用的核心源码为:

if(OrderStateList.ContainsKey(orderID_subOrderID))

{ HelpTools.NoticeAllClient(orderID_subOrderID, msg); //通知现

在所有正在监听该订单的客户端

OrderStateList[orderID_subOrderID].Add(msg);

}

3.3 人工制图消息的控制

在ParaServer中,由自定义接口InterfaceCMD来表示所有消息处理的入口,再由实现该接口的自定义类CmdManualMappingPS处理该消息.由于不同的遥感生态产品生产过程不同,因此,在用MonitorClient监控时,界面上显示的内容会有差异.为了最大限度地降低生产过程中意外消息的干扰,及加强消息控制的有效性,MonitorClient端采用渐进式的操作按钮接口可用的设计.当生产过程进行到需要某一个人工交互的过程时,MonitorClient端只有与该过程相关的操作按钮接口可用,这样就避免了误操作.

图5 等待人工制图

任务订单L201110200002964-0009的产品生产过程执行到人工制图这一步骤,如图5所示,此时,只有【人工制图】和【制图完成】两个跟制图消息相关的操作按钮可用.点击右上方的工具栏中的【人工制图】,即向ParaServer发送消息: Mapping@L201110200002964-0009,表示该MonitorClient将处理此订单的人工制图过程;点击【制图完成】结束此次人工交互过程,向ParaServer发送消息:

ManualMapping@L201110200002964-0009#F#

系统中人工交互消息控制的原理同上.图6展示的是归档的消息控制,订单L201110200002964-0009生产完成后得到的一个xml形式的产品结果.若是产品需求人员对此结果满意,则可以点击工具栏的【归档】对结果进行保存;否则,可以点击【放弃归档】,ParaServer将删除对此次产品生产的所有生产结果.

图6 产品xml结果展示

4.结束语

本文针对生态环境遥感产品生产系统的架构,对其产品生产监控提出了一种解决方案.提出了以ParaServer、DispatchServer和MonitorClient三种独立运行部件为基础的监控系统模型,实现了遥感生态产品生产系统中的监控功能.提出使用多线程运行机制与Push模式相结合的方式监控ParaServer的状态,并通过对ParaServer中订单状态队列的设计来解决人工交互消息的控制问题.

在后续完善过程中,我们将ParaServer与MonitorClient的消息通信部分单独提取出来,封装成独立的模块,以提高本系统监控Push-Model的复用性.本系统的消息格式约定多,在系统实现过程中,调试难度大.项目后期我们将在系统中加入日志功能,以解决调试难的问题.