消息订阅方法、装置、系统、电子设备及存储介质与流程

文档序号:20917683发布日期:2020-05-29 13:44阅读:211来源:国知局
消息订阅方法、装置、系统、电子设备及存储介质与流程

本发明涉及物联网技术领域,特别是涉及一种消息订阅方法、装置、系统、电子设备及存储介质。



背景技术:

消息队列遥测传输(messagequeuingtelemetrytransport,mqtt)协议是一种基于发布/订阅(publish/subscribe)模式的通讯协议,广泛应用于物联网行业。

目前,基于mqtt协议进行消息发布和消息订阅所对应的消息处理过程中,所采用的开源消息代理软件可以为mosquitto,rabbitmq(rabbitmessagequeue),事件派发器(eventemitter),activemq(activemessagequeue)等,其中,mosquitto是一款实现了消息推送协议mqttv3.1的开源消息代理软件,rabbitmq是实现了高级消息队列协议(amqp)的开源消息代理软件,activemq是apache软件基金会研发的开放源代码消息中间件。如图1所示,图1为现有mqtt系统的一种结构示意图。该mqtt系统中包括消息发布客户端、服务设备和消息订阅客户端。其中,服务设备为安装有开源消息代理软件的电子设备。服务设备接收并存储消息发布客户端发布的待订阅消息。在接收到消息订阅客户端发送给的针对待订阅消息的订阅请求时,可以将待订阅消息发送给消息订阅客户端,完成消息处理过程。

但是,在上述mqtt系统中,由于开源消息代理软件都是以单节点的形式为提供消息发布服务或消息订阅服务的,一旦开源消息代理软件出现异常时,消息发布以及消息订阅将无法正常进行,mqtt系统将无法正常运行,使得mqtt系统的可用性较差。



技术实现要素:

本发明实施例的目的在于提供一种消息订阅方法、装置、系统、电子设备即存储介质,以提高mqtt系统的可用性。具体技术方案如下:

本发明实施例提供了一种消息订阅方法,应用于mqtt集群中的第一从服务设备,所述mqtt集群包括主服务设备、至少一个从服务设备以及共享文件存储设备,所述方法包括:

按照预设时间间隔,请求获取共享文件锁,所述共享文件锁是所述主服务设备出现异常时释放的;

在获取到所述共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求;

基于所述订阅请求,在所述第一消息的预设有效时长内,从所述共享文件存储设备中获得所述第一消息;

向所述第一客户端发送所述第一消息。

可选的,所述共享文件存储设备中存储的第一消息携带有所述第一消息的第一接收时间;

所述基于所述订阅请求,在所述第一消息的预设有效时长内,从所述共享文件存储设备中获得所述第一消息的步骤,包括:

基于所述订阅请求,从所述共享文件存储设备中获得当前时间与所述第一接收时间之间的时间差小于所述预设有效时长的第一消息。

可选的,所述方法还包括:

在所述当前时间与所述第一接收时间之间的时间差不小于所述预设有效时长时,丢弃所述共享文件存储设备中存储的第一消息。

可选的,在获取到所述共享文件锁之后,所述方法还包括:

作为主服务设备接收所述第二客户端发布的第二消息;

根据所述第二消息的第二接收时间,将携带有所述第二接收时间的第二消息作为待订阅消息,存储到所述共享文件存储设备中。

可选的,所述第一消息为所述主服务设备在接收到第二客户端发布的待订阅信息后,存储到所述共享文存储设备中的;或

所述第一消息为所述第二消息。

可选的,所述按照预设时间间隔,请求获取共享文件锁的步骤,包括:

按照预设时间间隔,与所述mqtt集群中的其他从服务设备同时请求获取共享文件锁。

可选的,所述共享文件存储设备为:运行存储区域网络(storageareanetwork,san)或网络文件系统(networkfilesystem,nfs)的主服务设备和各个从服务设备中的存储空间构成的共享文件系统。

本发明实施例还提供了一种消息订阅装置,应用于mqtt集群中的第一从服务设备,所述mqtt集群包括主服务设备、至少一个从服务设备以及共享文件存储设备,所述装置包括:

第一获取模块,用于按照预设时间间隔,请求获取共享文件锁,所述共享文件锁是所述主服务设备出现异常时释放的;

第一接收模块,用于在获取到所述共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求;

第二获取模块,用于基于所述订阅请求,在所述第一消息的预设有效时长内,从所述共享文件存储设备中获得所述第一消息;

发送模块,用于向所述第一客户端发送所述第一消息。

可选的,所述共享文件存储设备中存储的第一消息携带有所述第一消息的第一接收时间;

所述第二获取模块,具体用于基于所述订阅请求,在当前时间与所述第一接收时间之间的时间差小于所述预设有效时长时,从所述共享文件存储设备中获取所述第一消息。

可选的,所述装置还包括:

丢弃模块,用于在所述当前时间与所述第一接收时间之间的时间差不小于所述预设有效时长时,丢弃所述共享文件存储设备中存储的第一消息。

可选的,所述装置还包括:

第二接收模块,用于在获取到所述共享文件锁之后,作为主服务设备接收所述第二客户端发布的第二消息;

存储模块,用于根据所述第二消息的第二接收时间,将携带有所述第二接收时间的第二消息作为待订阅消息,存储到所述共享文件存储设备中。

可选的,所述第一消息为所述主服务设备在接收到第二客户端发布的待订阅信息后,存储到所述共享文存储设备中的;或所述第一消息为所述第二消息。

可选的,所述第一获取模块,具体用于按照预设时间间隔,与所述mqtt集群中的其他从服务设备同时请求获取共享文件锁。

可选的,所述共享文件存储设备为:运行san或nfs的主服务设备和各个从服务设备中的存储空间构成的共享文件系统。

本发明实施例还提供了一种消息订阅系统,所述系统包括客户端和mqtt集群,所述mqtt集群包括客户端、主服务设备、至少一个从服务设备以及共享文件存储设备;

所述客户端,用于发送订阅请求和接收消息;

所述mqtt集群中第一从服务设备,用于按照预设时间间隔,请求获取共享文件锁,所述共享文件锁是所述主服务设备出现异常时释放的;在获取到所述共享文件锁后,作为主服务设备接收客户端发送的第一消息的订阅请求;基于所述订阅请求,在所述第一消息的预设有效时长内,从所述共享文件存储设备中获得所述第一消息;向所述客户端发送所述第一消息。

本发明实施例还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述任一所述的消息订阅方法步骤。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的消息订阅方法步骤。

本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的消息订阅方法。

本发明实施例有益效果:

本发明实施例提供的消息订阅方法、装置、系统、电子设备及存储介质,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有mqtt系统的一种结构示意图;

图2为本发明实施例提供的一种mqtt系统的一种结构示意图;

图3为本发明实施例提供的消息订阅方法的第一种流程示意图;

图4为本发明实施例提供的消息订阅方法的第二种流程示意图;

图5为本发明实施例提供的消息订阅方法的第三种流程示意图;

图6为本发明实施例提供的消息处理过程的一种信令图;

图7为本发明实施例提供的消息订阅装置的一种结构示意图;

图8为本发明实施例提供的消息订阅系统的一种结构示意图;

图9为本发明实施例提供的电子设备的一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决单节点的开源消息代理软件进行消息处理过程中,mqtt系统可用性较差的问题,本发明实施例提供了一种消息订阅方法。该方法可以适用于任一安装有开源消息代理软件的电子设备。在本发明实施例提供的方法中,mqtt集群中的第一从服务设备按照预设时间间隔,请求获取共享文件锁,该共享文件锁是主服务设备出现异常时释放的,在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求,基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备中获得第一消息,向第一客户端发送第一消息。

通过本发明实施例提供的方法,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

在本发明实施例中,上述mqtt系统中可以包括客户端和mqtt集群。其中,mqtt集群中包括多个服务设备,以及共享文件存储设备。mqtt集群中的每一服务设备均可访问共享文件存储设备。在mqtt系统中,客户端可以包括消息发布客户端和消息订阅客户端。消息发布客户端承担的角色为消息发布者(publisher),消息订阅客户端承担的角色为消息订阅者(subscriber)。服务设备即上述安装有上述开源消息代理软件的电子设备,承担的角色为消息代理(broker)。

为便于理解,以图2为例进行说明,图2为本发明实施例提供的一种mqtt系统的一种结构示意图。

主服务设备可以接收消息发布客户端发布的消息,并将接收到的消息存储到共享文件存储设备中,完成消息发布过程。主服务设备还可以接收消息订阅客户端发送的订阅请求,并从共享文件存储设备中获取对应的消息,将获取到的消息发送给消息订阅客户端,完成消息订阅过程。在主服务设备正常运行过程中,也就是主服务设备是可以正常访问的,从服务设备是不可以访问的。只有当主服务设备出现异常时,从服务设备才会承担起主服务设备的角色,协助完成消息发布过程以及消息订阅过程。当mqtt集群中发生异常的主服务设备在恢复正常时,该主服务设备的角色将从服务设备。

在本发明实施例中,上述mqtt集群中的主服务设备和从服务设备并不存在实质上的主备关系。主服务设备和从服务设备仅是逻辑上的区分。在本发明实施例中,将mqtt集群中存储有共享文件锁的服务设备的角色确定为主服务设备,将未存储有共享文件锁的服务设备的角色确定为从服务设备。

在本发明实施例中,当上述mqtt集群配置完成时,该mqtt集群中的主服务设备可以是用户指定的存储有共享文件锁的服务设备。该mqtt集群中的主服务设备也可以是mqtt集群中的各个服务设备在竞争获取共享文件锁时,获取得到共享文件锁的服务设备。

一个可选的实施例中,上述共享文件存储设备可以为:运行san或nfs的主服务设备和各个从服务设备中的存储空间构成的共享文件系统。

另一个可选的实施例中,上述共享文件存储设备可以为:主服务设备或各个从服务设备可以访问的共享数据库。

下面通过具体的实施例,对本发明实施例进行说明。

如图3所示,图3为本发明实施例提供的消息订阅方法的第一种流程示意图。该方法应用于mqtt集群中的第一从服务设备。该第一从服务设备可以为mqtt集群中的任一从服务设备,并不起任何限定作用。该方法包括以下步骤。

步骤s301,按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备出现异常时释放的。

在本步骤中,mqtt集群中的每一从服务设备可以按照预设时间间隔,向公共存储空间请求获取共享文件锁。

在本发明实施例中,mqtt集群中的主服务设备上存储有共享文件锁。主服务设备的输入/输出(i/o)端口可以按照一定的时间间隔发送预设消息,验证主服务设备是否出现异常。当mqtt集群中的主服务设备出现异常,例如,某一时刻未发送预设消息。此时,主服务设备出现异常,共享文件锁将被释放,具体可以表示为将共享文件锁存储到每一服务设备均可访问的上述公共存储空间中。mqtt集群中的每一从服务设备从该公共存储空间中请求获取共享文件锁。

在本发明实施例中,上述共享文件锁可以为预设字符串所构成的令牌。服务设备在从共享文件存储设备中获取消息,或向共享文件存储设备存储消息时,均需在发送的报文的头文件中携带该共享文件锁。共享文件存储设备只会响应携带共享文件锁的报文。

在本发明实施例中,当主服务设备释放共享文件锁后,该主服务设备在异常恢复后其角色为从服务设备。

一个可选的的实施例中,第一从服务设备在请求获取共享文件锁时,第一从服务设备可以按照预设时间间隔,与mqtt集群中的其他从服务设备同时请求获取共享文件锁。也就是mqtt集群中的每一从服务设备均可以按照预设时间间隔,同时从公共存储空间中请求获取共享文件锁。从而在公共存储空间中存在共享文件锁时,共同竞争该共享文件锁。

另一个可选的实施例中,mqtt集群中的每一服务设备存在对应的预设优先级。mqtt集群中的从服务设备在请求获取共享文件锁时,可以按照预设优先级从高到低的顺序依次请求获取共享文件锁。

上述有预设优先级可以根据每一服务设备的属性,如数据处理能力,数据并发能力等确定。在此,对预设优先级不作具体限定。

步骤s302,在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求。

在本步骤中,第一从服务设备在获取到上述共享文件锁后,可以作为主服务设备,即承担起主服务设备的角色接收第一客户端发送的针对共享文件存储设备中存储的第一消息的订阅请求。其中,第一客户端在mqtt系统中角色为消息订阅者,即上述消息订阅客户端。为便于描述,下文以第一客户端进行说明。

在本发明实施例中,mqtt集群中的每一服务设备,即主服务设备和每一从服务设备均可以接收到第一客户端发送的订阅请求。

一个可选的实施例中,mqtt集群中的其他服务设备,即未获取到共享文件锁的服务设备可以丢弃接收到的订阅请求,也可以响应接收到的订阅请求,即向共享文件存储设备发送第一消息的获取请求,但是该第一获取请求的头文件中不包括上述共享文件锁。

一个可选的实施例中,上述第一消息可以为主服务设备(未出现异常)在接收到第二客户端发布的待订阅信息后,存储到共享文存储设备中的。其中,第二客户端在mqtt系统中角色为消息发布者,即上述消息发布客户端。为便于描述,下文以第二客户端进行说明。

步骤s303,基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备中获得第一消息。

在本发明实施例中,第一从服务设备从上述共享文件存储设备中获取第一消息具体可以表示为,第一从服务设备向共享文件存储设备发送针对第一消息的获取请求,该获取请求中携带有上述共享文件锁,共享文件存储设备在接收到该获取请求后,将第一消息发送给第一从服务设备。因此,虽然mqtt集群中的每一服务设备都可以接收到上述订阅请求。但是由于mqtt集群中除第一从服务设备以外的每一服务设备没有获取到共享文件锁,这使得除第一从服务设备以外的每一服务设备向共享文件存储设备发送的获取请求中均未携带有共享文件锁,从而无法从共享文件存储设备中获取得到第一消息。关于在预设有效时长内的第一消息的获得过程可参见下文描述,在此不作具体说明。

步骤s304,向第一客户端发送第一消息。

采用图3所示的方法,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

一个可选的实施例中,上述共享文件存储设备中存储的第一消息携带有第一消息的第一接收时间,根据图3所示的方法,本发明实施例还提供了一种消息订阅方法。如图4所示,图4为本发明实施例提供的消息订阅方法的第二种流程示意图。方法包括以下步骤:

步骤s401,按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备出现异常时释放的。

步骤s402,在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求。

步骤s403,基于订阅请求,从共享文件存储设备中获得当前时间与第一接收时间之间的时间差小于预设有效时长的第一消息。

一个可选的实施例中,第一从服务设备可以基于接收到的订阅请求,从共享文件存储设备中获取第一消息。在获取到第一消息后,第一从服务设备可以将当前时间与第一接收时间之间的时间差与预设有效时长进行比较。在当前时间与第一接收时间之间的时间差小于预设有效时长时,第一从服务设备可以确定获得到第一消息。当前时间与第一接收时间之间的时间差不小于预设有效时长时,第一服务设备可以丢弃获取到的第一消息,进而确定位获得第一消息。

一个可选的实施例中,在当前时间与第一接收时间之间的时间差不小于预设有效时长时,丢弃共享文件存储设备中存储的第一消息。

例如,在当前时间与第一接收时间之间的时间差不小于预设有效时长时,第一从服务设备可以向上述共享文件存储设备发送针对第一消息的丢弃指令。共享文件存储设备在接收到上述丢弃指令,可以丢弃第一消息。

另一个可选的实施例中,第一服务设备可以基于接收到的订阅请求,向共享文件存储设备中请求获取第一消息,即向共享文件存储发送第一消息的获取请求。共享文件存储设备可以将当前时间与第一消息的第一接收时间之间的时间差与预设有效时长进行比较。当该时间差不小于预设时长时,共享文件存储设备可以不响应接收到的获取请求,如丢弃该获取请求。此时,第一从服务设备将无法获得在预设有效时长内的第一消息。当时间差小于预设时长时,共享文件可以响应接收到的获取请求。此时,第一从服务设备将获得在预设有效时长内的第一消息。

一个可选的实施例中,在当前时间与第一消息的第一接收时间之间的时间差不小于预设有效时长时,共享文件存储设备可以将丢弃存储的第一消息,或将存储的第一消息存储到用户指定的其他存储空间中,便于用户找回第一消息。此时,在接收到第一从服务设备发送的第一消息的获取请求时,共享文件存储设备将无法响应该获取请求。第一从服务设备也将无法获得在预设有效时长内的第一消息。

在本发明实施例中,上述预设有效时长可以是根据从服务设备承担起主服务设备这一角色的时间差确定,也可以为用户预设的有效时长。在此,对上述预设有效时长不作具体限定。

在本发明实施例中,通过将当前时间与第一接收时间之间的时间差与预设有效时长进行比较,可以准确的确定出第一消息的存储时长是否在预设有效时长内,降低了不在预设有效时长内的消息被发送的概率,节约网络资源。

步骤s404,向第一客户端发送第一消息。

上述步骤s404与上述步骤s304相同。

一个可选的实施例中,根据图3所示的方法,本发明实施例还提供一种消息订阅方法。如图5所示,图5为本发明实施例提供的消息订阅方法的第三种流程示意图。该方法包括以下步骤。

步骤s501,按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备出现异常时释放的。

步骤s502,在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求。

步骤s503,基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备中获得第一消息。

步骤s504,向第一客户端发送第一消息。

上述步骤s501-步骤s504与上述步骤s301-步骤s304相同。

步骤s505,在获取到共享文件锁之后,作为主服务设备接收第二客户端发布的第二消息。

在本步骤中,在获取到上述共享文件锁后,第一从服务设备将承担起主服务设备的角色,此时,第一从服务设备可以接收第二客户端发布的第二消息。

在本发明实施例中,第二客户端可以向mqtt集群中的每一服务设备发布第二消息。

在本发明实施例中,对上述步骤s502与步骤s505的执行顺序不作具体限定。

步骤s506,根据第二消息的第二接收时间,将携带有第二接收时间的第二消息作为待订阅消息,存储到共享文件存储设备中。

在本步骤中,第一从服务设备可以根据第二消息的第二接收时间,将第二时间作为时间戳携带在第二消息中,从而将携带时间戳的第二消息存储到共享文件存储设备中。

一个可选的实施例中,第一从服务设备可以直接将携带有第二接收时间的第二消息存储到上述共享文件存储设备中。

另一个可选的实施例中,第一从服务设备可以向上述共享文件存储设备发送包括携带有接收时间的第二消息的存储指令。共享文件存储设备在接收到该存储指令后,可以存储第二消息与携带的接收时间的对应关系。

一个可选的实施例中,mqtt集群中的每一服务设备在接收到第二消息后,可以向共享文件存储设备发送包括第二消息的存储指令。其中,存储有共享文件锁的第一从服务设备发送的存储指令的头文件中包括共享文件锁。未存储有共享文件锁的其他从服务设备发送的存储指令的头文件中将不包括共享文件锁。

另一个可选的实施例中,mqtt集群中的每一服务设备在接收到第二消息后,只有存储有共享文件锁的第一从服务设备可以向共享文件存储设备发送包括第二消息的存储指令。mqtt集群中未存储有共享文件锁的其他从服务设备不可以向共享文件存储设备发送包括第二消息的存储指令。

一个可选的实施例中,第一消息为主服务设备(未发生异常)在接收到第二客户端发布的待订阅信息后,存储到共享文存储设备中的;或第一消息为第二消息。

采用图5所示的方法,第一从服务设备可以接收第二客户端发送的第二消息,并将携带用时间戳的第二消息存储到共享文件存储设备中,由于时间戳的存在,便于后期在进行消息订阅时,确定第一客户端请求订阅的消息是否在预设有效时长内。

为便于理解,结合图6对上述消息发布以及消息订阅过程进行说明。图6为本发明实施例提供的消息处理过程的一种信令图。具体包括以下步骤。

步骤s601,主服务设备在出现异常时,释放共享文件锁。

当图6中的主服务设备释放共享文件锁后,若异常恢复,则该主服务设备中未存储有共享文件锁,此时,该主服务设备的角色将变更为从服务设备。

步骤s602,从服务设备获取到共享文件锁。

mqtt集群中的每一从服务设备请求获取共享文件锁,图6中的从服务设备为获取到共享文件锁的从服务设备,即图6中的从服务设备为主服务设备出现异常后,mqtt集群中承担起主服务设备功能的服务设备。图6中并未示出未获取到共享文件锁的从服务设备。

步骤s603,第一客户端向每一服务设备发送第一消息的订阅请求。

步骤s604,获取到共享文件锁的从服务设备在接收到第一消息的订阅请求时,向共享文件存储设备请求获取第一消息。

mqtt集群中的其他从服务设备,即未获取到共享文件锁的从服务设备也可以接收到第一消息的订阅请求。此时,其他从服务设备可以丢弃接收到的订阅请求。或者,其他从服务设备也可以向共享文件存储设备发送不包含共享文件锁的针对第一消息的获取请求。

步骤s605,共享文件存储设备向获取到共享文件锁的从服务设备发送第一消息。

在当前时间与第一消息的第一接收时间之间的时间差小于预设有效时长时,共享文件存储设备向获取到共享文件锁的从服务设备发送第一消息。

步骤s606,获取到共享文件锁的从服务设备将第一消息发送给第一客户端。

步骤s607,第二客户端向每一服务设备发布第二消息。

步骤s608,获取到共享文件锁的从服务设备将接收到的第二消息发送给共享文件存储设备。

mqtt集群中的其他从服务设备,即未获取到共享文件锁的从服务设备,在接收到第二看看客户端发送的第二消息时,可以丢弃该第二消息,即不对第二消息进行处理。

步骤s609,共享文件存储设备存储携带有第二接收时间的第二消息。

在本发明实施例中,mqtt集群中的共享文件存储设备可以为mqtt中每一服务设备共享消息的存储空间。在对服务设备和共享文件存储设备进行配置时,可以通过执行以下命令实现不同服务设备共享上述共享文件存储设备中的存储空间。以主服务设备的地址为192.168.60.17,从服务设备的地址为192.168.60.18,共享文件存储设备为nfs为例进行说明。

在主服务设备中执行以下命令:

$servicenfsstart,用于开启nfs服务。

$vi/etc/exports

/usr/local/apache-activemq-5.8.0/data192.168.60.18(rw,sync,no_root_squash)在主服务设备的配置文件/etc/exports中添加/usr/local/apache-activemq-5.8.0/data192.168.60.18(rw,sync,no_root_squash),用于允许192.168.60.18机器访问本机上的消息存储目录。

$servicenfsrestart,用于重启nfs使配置文件生效。

在从服务设备上执行以下命令:

$mount-tnfs-orw192.168.60.17:/usr/local/apache-activemq-5.8.0/data/usr/local/apache-activemq-5.8.0/data,用于将本机上的消息存储目录挂载到主服务设备的共享目录下。

在本发明实施例中,上述对mqtt集群中的主服务设备和从服务设备的配置过程是在mqtt系统运行前配置完成的。也就是只需要对mqtt集群进行一次配置,从而实现mqtt集群中不同服务设备的之间的文件共享。当mqtt系统运行时,若主服务设备出现异常,从服务设备承担起主服务设备的角色时,不需要对mqtt系统重新进行配置。

在上述配置过程中,服务设备是以activemq5.8.0为例的。在上述配置过程中还会涉及硬件环境、软件环境的配置,activemq5.8.0的安装与启动,nfs存储目录的调整,以及配置完成后的测试等过程,在此不作具体说明了。

基于同一种发明构思,根据上述本发明实施例提供的消息订阅方法,本发明实施例还提供了一种消息订阅装置。如图7所示,图7为本发明实施例提供的消息订阅装置的一种结构示意图。该装置应用于mqtt集群中的第一从服务设备,mqtt集群包括主服务设备、至少一个从服务设备以及共享文件存储设备。该装置包括以下模块。

第一获取模块701,用于按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备出现异常时释放的;

第一接收模块702,用于在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求;

第二获取模块703,用于基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备中获得第一消息;

发送模块704,用于向第一客户端发送第一消息。

可选的,上述共享文件存储设备中存储的第一消息携带有第一消息的第一接收时间;

上述第二获取模块703,具体可以用于基于订阅请求,在当前时间与第一接收时间之间的时间差小于预设有效时长时,从共享文件存储设备中获取第一消息。

可选的,上述消息订阅装置还可以包括:

丢弃模块,用于在当前时间与第一接收时间之间的时间差不小于预设有效时长时,丢弃共享文件存储设备中存储的第一消息。

可选的,上述消息订阅装置还可以包括:

第二接收模块,用于在获取到共享文件锁之后,作为主服务设备接收第二客户端发布的第二消息;

存储模块,用于根据第二消息的第二接收时间,将携带有第二接收时间的第二消息作为待订阅消息,存储到共享文件存储设备中。

可选的,上述第一消息为主服务设备在接收到第二客户端发布的待订阅信息后,存储到共享文存储设备中的;或第一消息为第二消息。

可选的,上述共享文件存储设备为:运行san或nfs的主服务设备和各个从服务设备中的存储空间构成的共享文件系统。

通过本发明实施例提供的装置,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

基于同一种发明构思,根据上述本发明实施例提供的消息订阅方法,本发明实施例还提供了一种消息订阅系统。如图8所示,图8为本发明实施例提供的消息订阅系统的一种结构示意图。该系统可以包括客户端801和mqtt集群。其中,mqtt集群包括主服务设备8021、至少一个从服务设备8022以及共享文件存储设备8023;

客户端801,用于发送订阅请求和接收消息;

mqtt集群中第一从服务设备8022,用于按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备8021出现异常时释放的;在获取到共享文件锁后,作为主服务设备8021接收客户端801发送的第一消息的订阅请求;基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备8023中获得第一消息;向客户端801发送第一消息。

通过本发明实施例提供的系统,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

基于同一种发明构思,根据上述本发明实施例提供的消息订阅方法,本发明实施例还提供了一种电子设备,如图9所示,包括处理器901、通信接口902、存储器903和通信总线904,其中,处理器901,通信接口902,存储器903通过通信总线904完成相互间的通信;

存储器903,用于存放计算机程序;

处理器901,用于执行存储器903上所存放的程序时,实现如下步骤:

按照预设时间间隔,请求获取共享文件锁,共享文件锁是主服务设备出现异常时释放的;

在获取到共享文件锁后,作为主服务设备接收第一客户端发送的第一消息的订阅请求;

基于订阅请求,在第一消息的预设有效时长内,从共享文件存储设备中获得第一消息;

向第一客户端发送第一消息。

通过本发明实施例提供的电子设备,当mqtt集群中的主服务设备发生异常,主服务设备将释放共享文件锁。此时,mqtt集群中的每一从服务设备将请求获取该共享文件锁。当第一从服务设备获取到共享文件锁时,第一从服务设备的角色将转变为mqtt集群中的主服务设备,从而接收第一客户端发送的针对共享文件存储设备中第一消息的订阅请求,并在第一消息的预设有效时长内,向第一客户端发送第一消息。在该mqtt集群中,一旦主服务设备出现异常,mqtt集群中的从服务设备将及时承担起主服务设备的角色,为第一客户端提供消息订阅服务,实现了对主服务设备和从服务设备的集群化管理,提高了mqtt系统的可用性。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

基于同一种发明构思,根据上述本发明实施例提供的消息订阅方法,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一消息订阅方法的步骤。

基于同一种发明构思,根据上述本发明实施例提供的消息订阅方法,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一消息订阅方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、系统、电子设备、计算机可读存储介质及计算机程序产品等实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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