本发明涉及物联网技术领域,具体涉及一种基于netty的物联网设备实时告警方法。
背景技术:
在物联网的应用场景中,大量的终端设备源源不断地产生各种数据,对终端设备运行到可靠性提出了极高的要求,因此对终端设备运行状态进行实时监控,及时发现终端设备工作异常并报警就显得十分必要。
专利申请号:201910589561.2的专利文献,公开了“一种基于netty的异常数据告警方法”,该方法描述了一种客户端异常告警的方法,该方法需要提前配置好告警规则,当客户端启动时首先获得告警规则,然后采集待监控系统的数据,发现数据符合告警规则向服务器发送告警信息,服务器再向相关人员发送告警邮件。该方法的主要缺陷是当告警规则改变时,客户端无法及时获得最新的告警规则,可导致告警延误现象的发生,另外邮件告警的方式也难以确保告警的实时性。
技术实现要素:
发明目的:为了克服现有技术中存在的不足,提供一种基于netty的物联网设备实时告警方法,使用netty框架建立tcp长连接和websocker通道,不仅可以将告警规则及时下发到设备网关,也能将运行状态数据及时推送给web前端,具有实时性强、实现方式简单的特点,适用于物联网环境下终端设备的实时告警。
技术方案:为实现上述目的,本发明提供一种基于netty的物联网设备实时告警方法,包括如下步骤:
s1:在服务器端设置相互连接的websocket模块和tcp模块;
s2:通过websocket模块启动websocket服务,建立web前端和websocket模块之间的websocket连接;
通过tcp模块启动tcp服务用于监听设备网关的tcp请求;
s3:设备网关向tcp模块发送tcp长连接请求,与tcp模块建立tcp长连接;
s4:配置和保存告警规则;
s5:接收终端设备上报到状态数据,将状态数据与所有告警规则进行匹配,若状态数据与其中一条告警规则匹配,则将该状态数据发送到tcp模块;
s6:tcp模块将状态数据发送到websocker模块,由websocker模块将状态数据推送给web前端模块,web前端模块完成告警任务。
进一步的,所述步骤s4中配置和保存告警规则具体为:用户在web前端模块上配置告警规则,并将告警规则通过websocket通道发送到websocker模块,websocker模块将告警规则发送到tcp模块,tcp模块将告警规则发送到设备网关,设备网关将告警规则保存到本地告警规则库中。
进一步的,所述设备网关与tcp模块之间tcp长连接断开,tcp模块更新tcp长连接列表,将tcp长连接对应的数据通道删除。
进一步的,所述设备网关向tcp模块周期性地发送心跳信息用于维持tcp长连接。
进一步的,所述设备网关收到告警规则,遍历本地告警规则库,删除指定的告警规则,完成对本地告警规则库的更新。
本发明方法首先在web前端和服务器端建立websocket数据传输通道,并在服务器端和设备网关间建立tcp长连接,然后由web前端将告警规则发送到服务器,服务器将告警规则同步到设备网关,设备网关接收终端设备上报的运行状态数据,与告警规则进行匹配,将符合告警规则的运行状态数据发送到服务器端,服务器端再通过websocker通道将运行状态数据推送到web前端。
有益效果:本发明与现有技术相比,使用netty框架建立tcp长连接和websocker通道,不仅可以将告警规则及时下发到设备网关,也能将运行状态数据及时推送给web前端,具有实时性强、实现方式简单的特点,适用于物联网环境下终端设备的实时告警。
附图说明
图1为本发明方法的应用结构示意图;
图2为本发明方法的流程示意图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
如图1和图2所示,本发明提供一种基于netty的物联网设备实时告警方法,包括如下步骤:
1)在服务器端设置相互连接的websocket模块和tcp模块,通过websocket模块创建http服务线程,http服务线程加载指定资源目录下的web前端网页,并在启动指定端口,监听http请求。
2)websocket模块创建websocket服务线程,该线程继承textwebsocketframe类并启动8080端口,监听websocket请求。
3)web前端模块向websocket模块发起http请求,websocket响应http请求,生成应答消息发送给web前端模块,websocket模块与web前端模块之间建立websocket双向数据通道,websocket模块记录websocket双向数据通道对应的上下文channelcontext。
4)tcp模块创建tcp服务线程,该线程启动指定的端口,监听设备网关的请求。
5)设备网关向tcp模块发起tcp连接请求,与tcp模块建立tcp长连接,tcp模块建立tcp长连接列表,列表记录了所有tcp连接对应的数据通道channelcontext。
6)web前端模块向websocker模块发送告警规则,本实施例中告警规用{alertcmd,alertid,alertinfo}表示。alertcmd表示告警命令,该值包括“add”和“delete”,其中“add”表示新增告警规则,“delete”表示删除告警规则;alertid表示告警id,每条告警规则都有唯一的编号,alertinfo表示告警内容,该值为json格式,例如{“itemname”:“cpu”;“itemcondition”:“value>50%”},表示监控终端设备的cpu工作状态,如果cpu的占用率大于50%则发出告警。
7)websocker模块将告警规则发送到tcp模块,tcp模块遍历tcp长连接列表,获得所有的数据通道channelcontext,并通过数据通道channelcontext获得tcp连接到出口通道(outboundchannel),然后将告警规则写到出口通道中发送到设备网关。
8)设备网关收到告警规则,解析告警规则,如果alertcmd为“add”,则将该告警规则中的alertid,alertinfo添加到本地告警规则库中。
9)终端设备向设备网关发送运行状态数据,本实施例中运行状态数据用json格式表示,例如{“itemname”:“cpu”;“itemvalue”:20%}。
10)设备网关收到运行状态数据,遍历本地规则库,如果运行状态数据与本地告警规则库的某一条规则匹配,则将该运行状态数据通过tcp长连接通道发送到tcp模块;如果运行状态数据与规则库中的所有规则都不匹配,则丢弃该运行状态数据。
11)tcp模块收到运行状态数据,将该数据发送到websocket模块;
12)websocket模块将运行状态数据写入到websocket双向数据通道对应的上下文channelcontext,由channelcontext将该数据发送到web前端模块;
13)web前端模块解析运行状态数据并更新页面,向用户发出告警消息。
本实施例中本地告警规则库需要进行更新,具体更新过程为:
1、web前端模块删除已有告警规则时,可以在向websocket模块发送的告警规则中设置alertcmd字段的值为“delete”,并用alertid记录指定待删除的告警规则编号。
2、websocket模块向tcp模块发送告警规则。
3、tcp模块向设备网关发送告警规则。
4、设备网关收到告警规则,根据告警规中的alertid遍历本地告警规则库,删除指定的告警规则,完成更新。
本实施例中为了在设备网关和tcp模块之间维持tcp长连接,设备网关可以向tcp模块周期性地发送心跳信息。如果设备网关与tcp模块之间到tcp长连接断开,tcp模块更新tcp长连接列表,将tcp长连接对应的数据通道channelcontext删除。