一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种电网运行风险预警信息流转方法及存储系统与流程

2021-11-09 23:02:00 来源:中国专利 TAG:


1.本发明属于风险预警信息流转技术领域,具体涉及一种电网运行风险预警信息流转方法及存储系统。


背景技术:

2.目前电网的信息化建设处于一个高速发展阶段,数字化转型已经成为未来能源及电力发展的关键战略,而电网运行管理信息化又是电网在数字化转型中的一个重点领域。鉴于电网运行管理业务的专业性、复杂性,急需实现一种根据业务场景进行消息推送的方法,该消息推送方法实现对电网管理系统的建设具有重要的意义。
3.rabbitmq是遵循amqp(高级消息队列协议)的开源消息中间件,在分布式系统中可以用来存储转发消息,在易用性、扩展性、高可用性等方面表现优异;websocket是一种在单个tcp连接上进行全双工通信的协议,其最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。
4.电网的高速发展带来的技改、基建、新设备投运工作量极大增加,电网运行方式变动频繁,非正常运行方式、特殊运行方式难于避免,给电网安全稳定运行带来了威胁,电网运行风险对电网安全稳定运行起着重要的作用。电网风险预警信息的流转在电网运行风险管理中起着关键性作用;如何让电网风险预警从风险评估到风险预警反馈整个流程流转实现消息及时传递,是电网运行风险管控系统需要解决的一个问题。
5.消息推送目前在电网运行管理系统已经有多方面技术成果,但是目前还未有一套基于rabbitmq、websocket、redis实现的准实时消息推送方法。


技术实现要素:

6.本发明的目的是为了解决现有技术的不足,提供一种电网运行风险预警信息流转方法及存储系统。
7.为实现上述目的,本发明采用的技术方案如下:一种电网运行风险预警信息流转方法,具体是:所述的消息中心包括消息主题管理模块、消息订阅模块、消息监听模块、消息处理模块、消息生产模块、消息推送模块、消息异常处理模块;所述的电网运行风险预警信息流转方法包括如下步骤:步骤(1),消息主题管理:通过消息主题管理模块管理风险预警消息主题,所有涉及到消息主题的地方必须从消息主题管理模块获取数据,用户需要使用消息主题前需要先在消息主题管理模块中注册消息主题;步骤(2),消息订阅:(2.1)消息主题配置:通过消息订阅模块配置默认exchange,即消息主题;该默认exchange的类型为fanout类型,即广播模式类型;exchange的名称为sys_msg;所有队列初次构建都需要先绑定该exchange;默认exchange的作用是广播系统消息;
(2.2)消息队列建立:使用集群模式部署,按照消息队列的命名规则进行命名;用户登录应用系统后,消息订阅模块根据消息队列命名规则,组装消息队列;根据队列名称从rabbitmq中查询队列是否存在,如果队列存在则不做处理;如果队列不存在,则构建一个新的消息队列,并与步骤(2.1)中配置的默认exchange进行绑定,队列的routingkey为用户的用户id;步骤(3),消息监听:消息中心启动后,会自动创建simplemessagelistenercontainer消息监听容器;当消息订阅完成以后,消息监听模块会读取当前消息中心服务器上simplemessagelistenercontainer监听容器信息,查看当前队列是否在监听容器中,如果当前队列不在监听容器中,消息中心会将队列加入监听容器并重新启动监听;步骤(4),消息处理:消息监听模块启动后监听到队列里面有消息,则会主动调用消息处理模块处理消息;消息处理模块根据当前队列信息,获取到队列名称、exchange、routingkey;根据队列命名规则,解析获取用户id;通过消息推送模块调用websocket发送消息方法,将消息推送给客户端;步骤(5),消息生产:消息生产方通过消息生产模块生产消息,生产的消息中包括exchange名称、routingkey和消息内容;将所有类型的路由转换为用户id;通过转换后用户id,查询rabbitmq中含有用户id的所有队列;将查询到的队列与exchange绑定,exchange的routingkey为相应的用户id;队列与exchange绑定时候先查询exchange是否存在,若不存在,则需先构建exchange,然后将再队列和exchange绑定;完成队列和exchange的绑定后,直接给exchange发送消息;步骤(6),消息推送:(6.1)用户通过浏览器登录应用系统后,浏览器会通过websocket连接主动向消息中心发送连接请求;消息推送模块接收到请求后,首先根据接收到的token对当前连接用户进行鉴权,如果当前连接不是系统有效连接,消息推送模块自动断开websocket连接;如果当前连接是系统有效连接,则进行(6.2);(6.2)消息推送模块根据用户id到redis中查询是否有未处理消息,有未处理消息,优先将未处理消息推送给客户端;获取rabbitmq监听容器,如果监听容器未启动,需要启动监听容器;判断含有用户id的队列是否在监听中,如果不存在,则将查询出来的队列添加到监听容器中,重启监听;(6.3)消息推送模块接收到消息监听模块推送过来的消息,根据消息中的用户id以及websocket连接的用户id判断是否是当前用户需要接收的消息;如果是,则直接调用websocket的sendmessage方法将消息推送到客户端;如果不是,将消息存放到redis缓存;步骤(7),消息异常处理:(7.1)消息未消费处理:当消息监听模块监听到队列有消息,且websocket连接异常,则将队列中的消息存储到redis缓存中;当websocket连接正常以后,消息异常处理模块通过用户id到redis缓存中匹配含有用户id的key获取消息,再把消息推送到客户端,同时清除redis缓存中对应的消息;(7.2)消息监听模块监听队列进行消息处理时候出现channel连接异常或者
websocket消费阻塞的情况,会将异常消息重新投放到队列休眠15秒后执行步骤(3.2)。
8.进一步,优选的是,步骤(1)中,消息的主题用来与rabbitmq的exchange交换机对应。
9.进一步,优选的是,步骤(2.2)中,消息队列建立时使用docker应用集群部署;命名规则具体为:用户id “:” 应用当前连接的消息中心节点的服务器ip “:” 当前连接节点的docker容器端口号组成。
10.进一步,优选的是,消息监听模块监听消息队列中的消息情况,当队列中出现待消费消息时,经过消息处理模块处理后,再通过channelawaremessagelistener中消息处理方法onmessage调用消息推动模块中的websocket的发送消息方法sendmessage,将消息发送给消息推送模块;消息发送完成以后消息处理模块调用rabbitmq中channel的basicack方法确认消息已经发送给消息推送模块,同时调用rabbitmq中channel的queueunbind方法解除队列与主题的绑定关系,释放系统资源。
11.进一步,优选的是,步骤(4)中,如果处理的消息不是系统消息,那么消息处理完成后需要解除队列与exchange的绑定。
12.进一步,优选的是,步骤(5)中,routingkey有三种类型:用户id、机构id、角色id;将步骤(2)、步骤(4)~(7)中的用户id替换为机构id或角色id。
13.进一步,优选的是,步骤(6.1)中,请求信息包含用户token信息、用户请求订阅的消息主题。
14.进一步,优选的是,步骤(6)中,用户通过(6.1)连接到消息推送模块以后,如果当前连接是有效连接,客户端每隔15秒会给消息推送模块发送心跳数据包,确保websocket持续有效,保证消息能正常推送到客户端;步骤(6)中,消息推送模块检测到websocket断开后,则控制消息监听模块将当前监听的这个队列移除监听。
15.进一步,优选的是,步骤(7.1)中,在redis缓存中存储时候的key通过以下方式组装:unsend_系统时间值_用户id。
16.本发明同时提供一种电网运行风险预警信息流转存储系统,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如上述电网运行风险预警信息流转方法的步骤。
17.本发明图1中的应用系统可指代电网运行风险管控系统,但不限于此。
18.本发明中客户端优选为浏览器。
19.本发明与现有技术相比,其有益效果为:本发明实现一种基于rabbitmq websocket redis的电网风险预警信息流转方法,解决电网风险预警流转的信息传递,实现准实时消息传递;在电网运行风险预警流程流转的每个环节都能实现消息准实时提醒,有效解决系统中电网运行风险预警信息流转需要依靠人工定时检查的问题,大幅度提高工作效率。
20.在引入本发明以前,电网风险预警信息流转到相关责任人以后,需要风险预警流转环节各责任人电话通知下一环节责任人或者下一环责任人不定时刷新代办列表获取相关数据;引入本发明以后,责任人如果有待办任务,消息中心会将消息推送到用户浏览器端,消息自动在应用系统界面右下角弹框提醒;消息从生产到浏览器端展现的时间少于1
秒,弹窗提醒时间停留15秒,多条消息以层叠的方式展现。用户通过消息及时知晓任务情况,极大的提高了工作效率。
附图说明
21.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
22.图1为本发明应用时的总体结构示意图;图2为本发明消息中心的结构示意图。
具体实施方式
23.下面结合实施例对本发明作进一步的详细描述。
24.本领域技术人员将会理解,下列实施例仅用于说明本发明,而不应视为限定本发明的范围。实施例中未注明具体技术、连接关系或条件者,按照本领域内的文献所描述的技术、连接关系、条件或者按照产品说明书进行。所用材料、仪器或设备未注明生产厂商者,均为可以通过购买获得的常规产品。
25.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
26.本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
27.一种电网运行风险预警信息流转方法,具体是:所述的消息中心包括消息主题管理模块、消息订阅模块、消息监听模块、消息处理模块、消息生产模块、消息推送模块、消息异常处理模块;所述的电网运行风险预警信息流转方法包括如下步骤:步骤(1),消息主题管理:通过消息主题管理模块管理风险预警消息主题,所有涉及到消息主题的地方必须从消息主题管理模块获取数据,用户需要使用消息主题前需要先在消息主题管理模块中注册消息主题;步骤(2),消息订阅:(2.1)消息主题配置:通过消息订阅模块配置默认exchange,即消息主题;该默认exchange的类型为fanout类型,即广播模式类型;exchange的名称为sys_msg;所有队列初次构建都需要先绑定该exchange;默认exchange的作用是广播系统消息;(2.2)消息队列建立:使用集群模式部署,按照消息队列的命名规则进行命名;用户登录应用系统后,消息订阅模块根据消息队列命名规则,组装消息队列;根据队列名称从rabbitmq中查询队列是否存在,如果队列存在则不做处理;如果队列不存在,则构建一个新
的消息队列,并与步骤(2.1)中配置的默认exchange进行绑定,队列的routingkey为用户的用户id;步骤(3),消息监听:消息中心启动后,会自动创建simplemessagelistenercontainer消息监听容器;当消息订阅完成以后,消息监听模块会读取当前消息中心服务器上simplemessagelistenercontainer监听容器信息,查看当前队列是否在监听容器中,如果当前队列不在监听容器中,消息中心会将队列加入监听容器并重新启动监听;步骤(4),消息处理:消息监听模块启动后监听到队列里面有消息,则会主动调用消息处理模块处理消息;消息处理模块根据当前队列信息,获取到队列名称、exchange、routingkey;根据队列命名规则,解析获取用户id;通过消息推送模块调用websocket发送消息方法,将消息推送给客户端;步骤(5),消息生产:消息生产方通过消息生产模块生产消息,生产的消息中包括exchange名称、routingkey和消息内容;将所有类型的路由转换为用户id;通过转换后用户id,查询rabbitmq中含有用户id的所有队列;将查询到的队列与exchange绑定,exchange的routingkey为相应的用户id;队列与exchange绑定时候先查询exchange是否存在,若不存在,则需先构建exchange,然后将再队列和exchange绑定;完成队列和exchange的绑定后,直接给exchange发送消息;步骤(6),消息推送:(6.1)用户通过浏览器登录应用系统后,浏览器会通过websocket连接主动向消息中心发送连接请求;消息推送模块接收到请求后,首先根据接收到的token对当前连接用户进行鉴权,如果当前连接不是系统有效连接,消息推送模块自动断开websocket连接;如果当前连接是系统有效连接,则进行(6.2);(6.2)消息推送模块根据用户id到redis中查询是否有未处理消息,有未处理消息,优先将未处理消息推送给客户端;获取rabbitmq监听容器,如果监听容器未启动,需要启动监听容器;判断含有用户id的队列是否在监听中,如果不存在,则将查询出来的队列添加到监听容器中,重启监听;(6.3)消息推送模块接收到消息监听模块推送过来的消息,根据消息中的用户id以及websocket连接的用户id判断是否是当前用户需要接收的消息;如果是,则直接调用websocket的sendmessage方法将消息推送到客户端;如果不是,将消息存放到redis缓存;步骤(7),消息异常处理:(7.1)消息未消费处理:当消息监听模块监听到队列有消息,且websocket连接异常,则将队列中的消息存储到redis缓存中;当websocket连接正常以后,消息异常处理模块通过用户id到redis缓存中匹配含有用户id的key获取消息,再把消息推送到客户端,同时清除redis缓存中对应的消息;(7.2)消息监听模块监听队列进行消息处理时候出现channel连接异常或者websocket消费阻塞的情况,会将异常消息重新投放到队列休眠15秒后执行步骤(3.2)。
28.优选,步骤(1)中,消息的主题用来与rabbitmq的exchange交换机对应。
29.优选,步骤(2.2)中,消息队列建立时使用docker应用集群部署;
命名规则具体为:用户id “:” 应用当前连接的消息中心节点的服务器ip “:” 当前连接节点的docker容器端口号组成。
30.优选,消息监听模块监听消息队列中的消息情况,当队列中出现待消费消息时,经过消息处理模块处理后,再通过channelawaremessagelistener中消息处理方法onmessage调用消息推动模块中的websocket的发送消息方法sendmessage,将消息发送给消息推送模块;消息发送完成以后消息处理模块调用rabbitmq中channel的basicack方法确认消息已经发送给消息推送模块,同时调用rabbitmq中channel的queueunbind方法解除队列与主题的绑定关系,释放系统资源。
31.优选,步骤(4)中,如果处理的消息不是系统消息,那么消息处理完成后需要解除队列与exchange的绑定。
32.优选,routingkey有三种类型:用户id、机构id、角色id;将步骤(2)、步骤(4)~(7)中的用户id替换为机构id或角色id。
33.优选,步骤(6.1)中,请求信息包含用户token信息、用户请求订阅的消息主题。
34.优选,步骤(6)中,用户通过(6.1)连接到消息推送模块以后,如果当前连接是有效连接,客户端每隔15秒会给消息推送模块发送心跳数据包,确保websocket持续有效,保证消息能正常推送到客户端;步骤(6)中,消息推送模块检测到websocket断开后,则控制消息监听模块将当前监听的这个队列移除监听。
35.优选,步骤(7.1)中,在redis缓存中存储时候的key通过以下方式组装:unsend_系统时间值_用户id。
36.本发明同时提供一种电网运行风险预警信息流转存储系统,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如上述电网运行风险预警信息流转方法的步骤。
37.本发明中,消息集群使用docker容器部署:docker应用部署的容器;消息中心使用rabbitmq消息中间件:rabbitmq是遵循amqp(高级消息队列协议)的开源消息中间件;rabbitmq使用中几个关键知识点:(1)exchange交换器:对应消息中心消息主题,exchange有三种类型:
øꢀ
direct:任何发送到direct exchange的消息都会被转发到routekey中指定的queue上;
øꢀ
topic:任何发送到topic exchange的消息都会被转发到所有关心routekey中指定话题的queue上;
øꢀ
fanout:任何发送到fanout exchange的消息都会被转发到与该exchange绑定(binding)的所有queue上。
38.(2)queue消息队列,rabbitmq内部对象,用于存储消息,消息生产者生产消息最终投递到queue中,queue需要与exchange绑定,一个exchange可以绑定多个queue;消息消费端通过监听queue,从而获取到queue中的消息;消息推送使用websocket:websocket是一种在单个tcp连接上进行全双工通信的协议,用于客户端和服务器之间的数据交换;消息缓存使用redis:高性能缓存数据库,用于存储异常消息数据;
该方法主要包括以下几个模块:消息主题管理模块、消息订阅模块、消息生产模块、消息监听模块、消息处理模块、消息推送模块、消息异常处理模块。
39.消息生产及推送的具体步骤:1、在消息中心实现消息主题管理,通过消息主题管理模块管理风险预警消息主题,后续消息的订阅、生产等涉及到消息主题的地方必须从消息主题管理模块获取数据,用户需要使用消息主题前需要先在消息主题管理中注册消息主题;消息的主题用来与rabbitmq的exchange交换机对应;2、生成消息队列:(1)消息中心配置默认exchange(消息主题),该默认exchange的类型为fanout(广播模式)类型,exchange的名称为sys_msg;所有队列初次构建都需要先绑定该exchange;默认exchange(消息主题)的作用是广播系统消息;(2)消息队列建立(queue):
øꢀ
消息队列命名规则:消息中心使用docker应用集群部署(同样适用于其他类型的集群模式),为了实现多个消费端能够同时消费同一个主题的消息,消息队列的命名规则为:用户id “:” 应用当前连接的消息中心节点的服务器ip “:” 当前连接节点的docker容器端口号组成;例如:testuser01:192.168.11.1:8009;(这样做的目的是消息中心在处理消息通过websocket给应用推送消息时,默认所有含有同一个用户id的队列取到的消息都需要推送给该id用户;)
øꢀ
用户登录应用系统后:(a)消息中心根据消息队列命名规则,组装消息队列;(b)用户根据队列名称从rabbitmq中查询队列是否存在,如果队列存在则不做处理;如果队列不存在,需要构建一个新的消息队列,消息队列需要与步骤(1)中配置的默认exchange(消息主题)进行绑定,队列的routingkey为用户的用户id;3、消息监听:(1)前提:消息中心启动后,系统会自动创建simplemessagelistenercontainer消息监听容器。
40.(2)当步骤2(消息订阅完成以后)完成以后,消息中心会读取当前消息中心服务器上simplemessagelistenercontainer监听容器信息,查看当前队列是否在监听容器中,如果当前队列不在监听容器中,消息中心会将队列加入监听容器并重新启动监听;4、消息处理:
øꢀ
消息监听器启动后监听到队列里面有消息,会主动调用消息处理服务处理消息;
øꢀ
消息处理类根据当前队列信息,获取到队列名称、exchange、routingkey;
øꢀ
根据队列命名规则,解析获取用户id;通过调用websocket发送消息方法,将消息推送给客户端(websocket发送消息时候需要根据用户id来判断当前连接websocket的用户是不是接收消息的用户);
øꢀ
如果消息不是系统消息(sys_msg默认exchange(消息主题)),那么消息处理完成后需要解除队列与exchange的绑定,以免一直占用rabbitmq的通道资源;
5、消息生产:消息中心提供消息生产接口给消息生产方生产消息,消息会发送给exchange(消息主题)。
41.(1)消息生产接口信息包括(exchange名称(消息主题名称)、routingkey(路由信息)、消息内容,其中路由信息有三种类型:用户id、机构id、角色id);本实例使用用户id这种类型。
42.(2)消息生产接口首先将所有类型的路由转换为用户id;(3)消息生产接口通过步骤(2)中转换后用户id,查询rabbitmq中含有用户id的所有队列;(4)消息生产接口将(3)中查询的队列与exchange绑定,exchange的routingkey(路由信息)为步骤(2)中的用户id;队列与exchange绑定时候会查询exchange是否存在,不存在需要先构建exchange,然后将再队列和exchange绑定;(5)完成队列和exchange的绑定后,直接给exchange发送消息;6、消息推送:(1)用户通过浏览器登录系统后,浏览器会通过websocket连接主动向消息中心发送连接请求,请求信息包含用户token信息、用户请求订阅的消息主题(主题限制为步骤1中管理的消息主题)等;消息中心接收到请求后,首先根据接收到的token对当前连接用户进行鉴权(判断当前连接是不是有效连接,防止恶意请求),如果当前连接不是系统有效连接,消息中心自动断开websocket连接;(2)如果当前连接是系统有效连接:
øꢀ
根据用户id到redis中查询是否有未处理消息,有未处理消息,优先将未处理消息推送到客户端;
øꢀ
获取rabbitmq监听容器,如果监听容器未启动,需要启动监听容器;判断含有用户id的队列是否在监听中,如果不存在,需要将查询出来的队列添加到监听容器中,重启监听;(3)消息推送消息推送模块接收到消息监听模块推送过来的消息,根据消息中的用户id以及websocket连接的用户id判断是否是当前用户需要接收的消息;如果是就直接推送消息,如果不是将消息存放到redis缓存。
43.(4)websocket连接保证为保证应用和消息中心websocket的有效性,应用每隔15秒会向消息中心发送一条websocket连接消息,进行连接心跳检测,确保websocket一直处于有效连接中。
44.(5)消息中心检测到websocket断开后,需要将当前监听的这个队列移除监听;7、消息异常处理(1)消息未消费处理:当消息监听模块监听到队列有消息,但是应用和消息中心websocket连接异常,这时候系统会将队列中的消息存储到redis中,其中redis存储时候的key通过以下方式组装:unsend_系统时间值_用户id;应用和消息中心websocket连接正常以后,消息中心通过用户id到redis中匹配含有用户id的key获取消息,再把消息推送到客户端,同时清除redis中对应的消息;
(2)消息监听模块监听队列进行消息处理时候出现channel连接异常或者websocket消费堵塞等情况,消息中心会将异常消息重新投放到队列等到休眠时间到了以后会再次调用消息监听与处理模块进行消息处理;以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献