IOT集群内消息转发方法与装置与流程

文档序号:20038509发布日期:2020-02-28 11:37阅读:235来源:国知局
IOT集群内消息转发方法与装置与流程

本发明涉及物联网技术领域,具体而言涉及一种iot集群内消息转发方法与装置。



背景技术:

物联网iot是指将各种设备连接到统一的管理平台,实现设备和平台之间数据采集和命令下发的双向通信。在物联网环境下,终端设备与iot是通过socket长连接保持相互之间的通信,但在分布式环境下,iot服务会部署多个节点,而终端设备只能与其中一个节点建立连接,而此时如果发送给设备的消息没有发送到设备所在的节点上,那么设备将无法收到消息。现有的解决方案是通过将iot服务注册到注册中心上,通过注册中心节点间相互发现对方,然后通过http的方式进行消息转发,例如:设备连接在a节点上,但发给设备的消息被节点b接收到,此时b节点通过http的方式将消息转发给a节点,a节点收到转发消息后再发给设备。

结合图1所示的流程,现有的节点间消息转发的过程包括:首先,启动eureka注册中心,iot的服务向注册中心注册,并提供ip+port;然后,利用http转发消息,具体为:第一步:判断设备是否在线,如果设备不在线,结束;如果设备在线,执行第二步;第二步:判断设备是否连接在当前节点上,判断依据就是设备中的节点信息是否与当前节点在注册中心中提供ip+port一致,如果设备连在当前节点上,则直接转发消息到设备,否则执行第三步;第三步:通过http端口转发消息到目标节点,目标节点的ip+port在第二步中已经获取,可以直接通过http端口转发消息;第四步:目标节点收到消息并发送给设备,目标节点收到消息后,直接把消息发给设备。

但在实际实现过程中,结合图2可见,设备与iot之间是保持长连接的,但在分布式环境下,发送给设备的消息可能无法到达设备保持连接的节点上。



技术实现要素:

本发明目的在于提供一种利用虚拟设备在服务和服务间建立起长连接通道的iot集群内消息转发方法,包括:

iot服务向注册中心注册,并提供ip和端口;

建立虚拟设备,并对虚拟设备进行管理,其中在iot服务启动时,建立与其他可用服务节点之间的长连接通道,并且每个通道具有m个虚拟设备保持长连接,其中m为建立的虚拟设备的数量;

当iot服务收到发送给设备的消息后,组装消息体并指定发送主题;然后,响应于设备在线并且在连接在当前iot服务的节点上,则直接发送消息,如果设置在线但并未连接在当前iot服务的节点上,则通过虚拟设备转发消息。

优选地,所述注册中心被设置成提供查询端口,以供注册在骑上的服务调用,以查询获取注册在eureka注册中心上的可用服务节点,并获取到服务节点的ip和端口。

优选地,在建立虚拟设备的操作中,当iot服务启动时,虚拟设备的编号以下述方式建立和命名:

server_client_+ip:port+自增正整数命名

其中,port表示端口;

某一iot服务与其他服务之间建立长连接通道,并且每个连接通道具有m个虚拟设备保持长连接。

优选地,在建立虚拟设备后,iot服务对建立在其上面的虚拟设备进行管理,虚拟设备被设置成按照服务来源区分。

优选地,iot服务对建立在其上面的虚拟设备进行管理的操作中,某一iot服务对来自其他服务的虚拟设备的连接,将入对应其他服务的线程池中进行管理。

优选地,当iot服务收到发送给设备的消息后,进行消息转发的处理包括:

第一步:接收发送给设备的消息

iot服务收到发送给设备的消息后,组装消息体并指定发送主题;

第二步:判断当前设备是否在线

根据设备表中的字段online判断设备是否在线:当设备上线时,更新online=true,且设置设备的连接节点connectnode为当前iot服务的ip+port,当设备下线时,更新online=false,且清空connectnode;当设备在线时执行第三步,当设备离线时结束转发;

第三步:判断设备是否连接在当前iot服务节点上

iot服务通过erueka注册中心获取当前服务的节点信息,并与设备表中的connectnode进行比较:如果一致,则判定设备连接在iot服务节点上,直接发送;如果不一致,则判定连接到其他节点上,执行第四步;

第四步:转发消息到目标服务节点

从当前服务管理的虚拟设备的线程池中取出一个在线的虚拟设备;

从发送的消息体中取出发送主题topic,然后将消息体通过取出的虚拟设备发送出去;

消息到达目标服务节点,目标服务节点收到转发消息;

目标服务节点判断设备是否在线,如果设备不在线,则结束;如果设备在线,则转发消息到设备。

本发明的第二方面,还提出一种iot集群内消息转发装置,包括:

用于iot服务向注册中心注册,并提供ip和端口的模块;

用于建立虚拟设备,并对虚拟设备进行管理模块,其中在iot服务启动时,建立与其他可用服务节点之间的长连接通道,并且每个通道具有m个虚拟设备保持长连接,其中m为建立的虚拟设备的数量;

用于当iot服务收到发送给设备的消息后,组装消息体并指定发送主题;然后,响应于设备在线并且在连接在当前iot服务的节点上,则直接发送消息,如果设置在线但并未连接在当前iot服务的节点上,则通过虚拟设备转发消息的模块。

应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。

结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。

附图说明

附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:

图1是现有技术中节点间的消息转发流程的示例。

图2是本发明的设备注册与发现流程。

图3是本发明建立虚拟设备实现服务间相互建立连接通道的流程。

图4是本发明的节点间消息转发流程的示意。

图5是本发明的节点间消息转发的一个具体实现示例。

具体实施方式

为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。

在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。

根据本发明实施例的示例的iot集群内节点间的消息转发方法,利用虚拟设备在服务和服务间建立起长连接通道,从而减小资源占用和端口占用,在服务和服务之间占用指定数量的端口,可建立指定数量的消息通道;而且在消息转发时,使用mqtt长连接方式,只需要建立一次连接即可,不需要关闭,而且通道一直处理开启状态,有消息到达时,可以直接发送。

结合图2-图5所示,本发明示例性的iot集群内消息转发的方法包括以下三个基本操作:一、服务注册,节点相互发现;二、建立虚拟设备,在服务间相互建立连接通道,形成网状结构;三、基于虚拟设备进行消息转发。

结合图2、3所示的流程,其具体实现包括:

iot服务向注册中心注册,并提供ip(网络地址)和port(端口);

建立虚拟设备,并对虚拟设备进行管理,其中在iot服务启动时,建立与其他可用服务节点之间的长连接通道,并且每个通道具有m个虚拟设备保持长连接,其中m为建立的虚拟设备的数量;

当iot服务收到发送给设备的消息后,组装消息体并指定发送主题;然后,响应于设备在线并且在连接在当前iot服务的节点上,则直接发送消息,如果设置在线但并未连接在当前iot服务的节点上,则通过虚拟设备转发消息。

优选地,所述注册中心被设置成提供查询端口,以供注册在其上的服务调用,以查询获取注册在eureka注册中心上的可用服务节点,并获取到服务节点的ip和端口。

优选地,在建立虚拟设备的操作中,当iot服务启动时,虚拟设备的编号以下述方式建立和命名:

server_client_+ip:port+自增正整数命名

其中,port表示端口;

某一iot服务与其他服务之间建立长连接通道,并且每个连接通道具有m个虚拟设备保持长连接。

优选地,在建立虚拟设备后,iot服务对建立在其上面的虚拟设备进行管理,虚拟设备被设置成按照服务来源区分。

优选地,iot服务对建立在其上面的虚拟设备进行管理的操作中,某一iot服务对来自其他服务的虚拟设备的连接,将入对应其他服务的线程池中进行管理。

优选地,当iot服务收到发送给设备的消息后,进行消息转发的处理包括:

第一步:接收发送给设备的消息

iot服务收到发送给设备的消息后,组装消息体并指定发送主题;

第二步:判断当前设备是否在线

根据设备表中的字段online判断设备是否在线:当设备上线时,更新online=true,且设置设备的连接节点connectnode为当前iot服务的ip+port,当设备下线时,更新online=false,且清空connectnode;当设备在线时执行第三步,当设备离线时结束转发;

第三步:判断设备是否连接在当前iot服务节点上

iot服务通过erueka注册中心获取当前服务的节点信息,并与设备表中的connectnode进行比较:如果一致,则判定设备连接在iot服务节点上,直接发送;如果不一致,则判定连接到其他节点上,执行第四步;

第四步:转发消息到目标服务节点

从当前服务管理的虚拟设备的线程池中取出一个在线的虚拟设备;

从发送的消息体中取出发送主题topic,然后将消息体通过取出的虚拟设备发送出去;

消息到达目标服务节点,目标服务节点收到转发消息;

目标服务节点判断设备是否在线,如果设备不在线,则结束;如果设备在线,则转发消息到设备。

下面结合附图所示,更加具体的介绍前述实施例的示例性具体实现。

结合图2所示,服务注册,节点相互发现操作包括:

第一步:启动eureka注册中心,如图5中的r001

第二步:iot的服务向注册中心注册,并提供ip+port,如图5中的s001、s002、s003、s004。

结合图3、5所示,建立虚拟设备,服务间相互建立连接通道,形成网状结构的操作包括:

第一步:通过注册中心发现服务节点

eureka注册中心可提供查询端口,供注册在其上的服务进行调用,通过查询端口可以获取注册在eureka上的可用服务节点,并获取到服务节点的ip+port。

例如图5所示,服务节点b(s002)通过注册中心发现可用服务节点有3个(除自己外)。

第二步:服务间使用虚拟设备建立socket长连接通道

根据配置文件设置获取需要建立虚拟设备的数量device_count,iot服务启动时,虚拟设备的编号将以server_client_+ip:port+自增正整数命名。

前述的配置文件,依据服务器的能力(例如8核、12核等)配置能够给iot服务提供的虚拟设备的数量。

例如图5中,iot服务b与其他服务之间基于mqtt协议建立长连接通道l001、l002、l003,每个连接通道将会有device_count个虚拟设备保持长连接,而设备的编号例如server_client_ipa:porta_32。

第三步:对接入的虚拟设备进行管理维护

iot服务需要对建立在它上面的虚拟设备进行管理,虚拟设备会按照服务来源加以区分。例如在图5所示的例子中,服务a管理来自服务b、服务c、服务d上面的虚拟设备,那么来自服务b的虚拟设备的连接,将会被放入ipb:portb命令的线程池中,来自服务c的虚拟设备连接,将会被放入ipc:portc命令的线程池中,以此类推。

结合图4所示,基于虚拟设备进行消息转发的操作包括:

第一步:接收发送给设备的消息

iot服务收到发送给设备的消息后,组装消息体,指定发送主题。优选地,iot服务还可设置是否需要离线存储等配置。

第二步:判断当前设备是否在线

设备是否在线是根据设备表中的字段online来判断的:当设备上线时,会更新online=true,且设置设备的连接节点connectnode为当前iot服务的ip+port,例如:ipa:porta;当设备下线时,会更新online=false,且清空connectnode。

当设备在线时执行第三步,当设备离线时结束。

第三步:判断设备是否连接在当前iot服务节点上

iot服务通过erueka注册中心获取当前服务的节点信息,并于设备中的connectnode进行比较,如果一致,说明设备连接在此节点上,直接发送;如果不一致,说明连接到其他节点上,执行第四步。

第四步:发送消息到目标服务节点

从当前服务其管理的虚拟设备线程池中取出一个在线的虚拟设备;

从发送的消息体中取出发送主题topic,把消息通过该虚拟设备发送出去;

消息到达目标服务节点,目标服务节点收到转发消息;

目标服务节点判断设备是否在线,如果设备不在线则结束,如果设备在线,则转发消息到设备。

如此,实现本发明完整的消息转发流程。

结合以上实施例的基于虚拟设备的iot集群内的消息转发流程,其与现有技术的http转发相比,具有如下显著的有益效果:

1、消息体小,占用宽带小:同等大小的业务数据,使用本发明方案中的mqtt协议发送的消息体只有http协议发送消息体的1/3;对于正常同一大小的业务数据,http转发方案中消息体的大小可达0.3kb或者更大的尺寸;而本发明的方案中消息体的大小为0.1kb或者更小的尺寸;例如:设备上线,本发明的方案中的消息体大小为0.163kb,而http转发方案中的消息体大小为0.328kb;对于设备日志上报,本发明的方案中的消息体大小为0.236kb,而http转发方案中的消息体大小为0.508kb;

2、资源占用少,占用端口少:使用http方式,每发送一次消息,都要开启一个http端口,而服务器可以使用的端口数是有限的,在并发量大的情况下,端口会被短时间内占满,导致服务不可用,而使用本发明的该方案,只需要在服务和服务之间占用指定数量的端口,建立指定数量的消息通道;

3、交互简单:服务和服务之间转发业务消息时,使用http方式在建立连接和关闭连接时,server和client间需要多步握手交互才能完成,而本发明使用长连接方式(mqtt),只需要建立一次连接即可,不需要关闭(除非异常情况下关闭),而且通道一直处理开启状态,有消息到达时,可以直接发送;

4、动态扩展:随着业务的增长,消息并发量会跟随增长,本发明的方案只需要随业务变化,动态修改服务和服务之间连接数量的配置,例如虚拟设备的连接数量配置,可增加服务间连接的数量,从而提高了服务间消息转发的并发量。

结合图示,本发明的前述实施例还可以根据具体实施配置如下。

一种iot集群内消息转发装置,包括:

用于iot服务向注册中心注册,并提供ip和端口的模块;

用于建立虚拟设备,并对虚拟设备进行管理模块,其中在iot服务启动时,建立与其他可用服务节点之间的长连接通道,并且每个通道具有m个虚拟设备保持长连接,其中m为建立的虚拟设备的数量;

用于当iot服务收到发送给设备的消息后,组装消息体并指定发送主题;然后,响应于设备在线并且在连接在当前iot服务的节点上,则直接发送消息,如果设置在线但并未连接在当前iot服务的节点上,则通过虚拟设备转发消息的模块。

优选地,所述用于建立虚拟设备,并对虚拟设备进行管理模块还设置:

按照服务来源对建立到iot服务上的虚拟设备进行管理的模块。

优选地,所述用于当iot服务收到发送给设备的消息后,组装消息体并指定发送主题;然后,响应于设备在线并且在连接在当前iot服务的节点上,则直接发送消息,如果设置在线但并未连接在当前iot服务的节点上,则通过虚拟设备转发消息的模块被设置成按照下述方式进行消息转发:

第一步:接收发送给设备的消息

iot服务收到发送给设备的消息后,组装消息体并指定发送主题;

第二步:判断当前设备是否在线

根据设备表中的字段online判断设备是否在线:当设备上线时,更新online=true,且设置设备的连接节点connectnode为当前iot服务的ip+port,当设备下线时,更新online=false,且清空connectnode;当设备在线时执行第三步,当设备离线时结束转发;

第三步:判断设备是否连接在当前iot服务节点上

iot服务通过erueka注册中心获取当前服务的节点信息,并与设备表中的connectnode进行比较:如果一致,则判定设备连接在iot服务节点上,直接发送;如果不一致,则判定连接到其他节点上,执行第四步;

第四步:转发消息到目标服务节点

从当前服务管理的虚拟设备的线程池中取出一个在线的虚拟设备;

从发送的消息体中取出发送主题topic,然后将消息体通过取出的虚拟设备发送出去;

消息到达目标服务节点,目标服务节点收到转发消息;

目标服务节点判断设备是否在线,如果设备不在线,则结束;如果设备在线,则转发消息到设备。

虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1