分布式数据的传输方法、装置、系统及存储介质转让专利

申请号 : CN202210859992.8

文献号 : CN114938388B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄文君陈晖刘志勇张帅

申请人 : 浙江中控技术股份有限公司

摘要 :

本申请提供一种分布式数据的传输方法、装置、系统及存储介质,属于数据通信技术领域。该方法包括:通过第一终端设备生成传输消息以及传输消息的属性信息;由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备;通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备,订阅关系用于指示各消息队列传输类型与终端设备间的映射关系,各终端设备分别订阅一种消息队列传输类型;由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备。本申请可以降低整个系统的消息复杂度,减少消息传输的延迟。

权利要求 :

1.一种分布式数据的传输方法,其特征在于,所述方法应用于分布式系统,所述分布式系统中包括多个终端设备以及多个服务端设备,各服务端设备分别与各终端设备通信连接,所述方法包括:通过第一终端设备生成传输消息以及所述传输消息的属性信息,所述传输消息包括消息本体和消息标识,所述传输消息的属性信息包括:消息队列传输类型以及目标服务端设备信息;

基于所述目标服务端设备信息确定目标服务端设备;

由所述第一终端设备采用所述消息队列传输类型将所述传输消息发送给所述目标服务端设备;

通过所述目标服务端设备根据预先配置的订阅关系以及所述消息标识确定第二终端设备,所述订阅关系中记录有消息标识、消息队列传输类型以及待发送的终端设备,在接收到传输消息之后,基于传输消息中的消息标识确定对应的记录,进而基于消息队列传输类型确定待发送的终端设备作为第二终端设备,各终端设备分别订阅一种消息队列传输类型;

由所述目标服务端设备将所述传输消息以所述消息队列传输类型的方式发送给所述第二终端设备。

2.如权利要求1所述的方法,其特征在于,所述通过所述目标服务端设备根据预先配置的订阅关系以及所述消息标识确定第二终端设备之前,所述方法还包括:通过所述第二终端设备确定业务进程信息,所述业务进程信息包括:业务进程的标识、发布所述业务进程所使用的消息队列传输类型;

由所述第二终端设备向所述业务进程的标识对应的目标服务端设备发送所述业务进程信息;

由所述目标服务端设备基于所述业务进程信息建立所述订阅关系。

3.如权利要求2所述的方法,其特征在于,所述通过所述第二终端设备确定业务进程信息,包括:确定订阅类型,所述订阅类型包括:泛型订阅类型以及定向订阅类型;

若所述订阅类型为泛型订阅类型,确定发布所述业务进程所使用的消息队列的类型集合信息,并基于所述类型集合信息确定业务进程信息;

若所述订阅类型为定向订阅类型,确定发布所述业务进程所使用的消息队列的类型信息,并基于所述类型信息确定业务进程信息。

4.如权利要求1所述的方法,其特征在于,所述由所述目标服务端设备将所述传输消息以所述消息队列传输类型的方式发送给所述第二终端设备之后,所述方法还包括:确定所述第二终端设备的缓存队列中是否包含所述传输消息;

若否,由所述第二终端设备回调所述传输消息,并由所述第二终端设备存储所述传输消息以及所述传输消息的属性信息。

5.如权利要求4所述的方法,其特征在于,所述确定所述第二终端设备的缓存队列中是否包含所述传输消息之后,所述方法还包括:若确定所述第二终端设备的缓存队列中包含所述传输消息,由所述第二终端设备存储所述传输消息以及所述传输消息的属性信息。

6.如权利要求5所述的方法,其特征在于,由所述第二终端设备存储所述传输消息以及所述传输消息的属性信息之后,所述方法还包括:判定所述第二终端设备的缓存队列中所有的传输消息是否被所述第二终端设备接收完毕;

若是,删除具有相同消息标识的传输消息。

7.如权利要求1‑6任一项所述的方法,其特征在于,所述终端设备中设置有客户端中间件,所述方法还包括:所述终端设备与所述服务端设备通过所述客户端中间件发起通信。

8.一种分布式数据的传输装置,其特征在于,所述装置应用于分布式系统,所述分布式系统中包括多个终端设备以及多个服务端设备,各服务端设备分别与各终端设备通信连接,所述装置包括:生成模块、传输模块、确定模块、返回模块;

所述生成模块,用于通过第一终端设备生成传输消息以及所述传输消息的属性信息,所述传输消息包括消息本体和消息标识,所述传输消息的属性信息包括:消息队列传输类型以及目标服务端设备信息;

所述生成模块,还用于基于所述目标服务端设备信息确定目标服务端设备;

所述传输模块,用于由所述第一终端设备采用所述消息队列传输类型将所述传输消息发送给所述目标服务端设备;

所述确定模块,用于通过所述目标服务端设备根据预先配置的订阅关系以及所述消息标识确定第二终端设备,所述订阅关系中记录有消息标识、消息队列传输类型以及待发送的终端设备,在接收到传输消息之后,基于传输消息中的消息标识确定对应的记录,进而基于消息队列传输类型确定待发送的终端设备作为第二终端设备,各终端设备分别订阅一种消息队列传输类型;

所述返回模块,用于由所述目标服务端设备将所述传输消息以所述消息队列传输类型的方式发送给所述第二终端设备。

9.一种分布式系统,其特征在于,包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至7任一项所述的方法的步骤。

10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现权利要求1至7中任一项所述方法的步骤。

说明书 :

分布式数据的传输方法、装置、系统及存储介质

技术领域

[0001] 本申请涉及数据通信技术领域,具体而言,涉及一种分布式数据的传输方法、装置、系统及存储介质。

背景技术

[0002] 在分布式系统中,为了实现数据的订阅、发布、接收等工作,通常需要通过该分布式系统中的终端设备和服务端设备之间进行消息的相互传输。
[0003] 现有技术中,在进行数据订阅、发布、接收时,往往是由服务端设备接收终端设备发布的数据后,进而根据订阅的情况,由服务端设备将数据以所有可以实现的消息队列传输方式传输给对应的终端设备,终端设备基于需求的接收条件选择其中的一个消息队列传
输方式进行数据的接收。
[0004] 然而,该方法在实施过程中,由于需要以所有可以实现的消息队列传输方式进行传输,会导致在服务端设备向终端设备发送数据时,存在数据的重复发送,加大了整个系统的消息复杂度和消息传输的延迟。

发明内容

[0005] 本申请的目的在于提供一种分布式数据的传输方法、装置、系统及存储介质中,可以降低整个系统的消息复杂度,减少消息传输的延迟。
[0006] 本申请的实施例是这样实现的:
[0007] 本申请实施例的一方面,提供一种分布式数据的传输方法,该方法应用于分布式系统,分布式系统中包括多个终端设备以及多个服务端设备,各服务端设备分别与各终端
设备通信连接,该方法包括:
[0008] 通过第一终端设备生成传输消息以及传输消息的属性信息,传输消息包括消息本体和消息标识,传输消息的属性信息包括:消息队列传输类型以及目标服务端设备信息;
[0009] 由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备;
[0010] 通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备,订阅关系用于指示各消息队列传输类型与终端设备间的映射关系,各终端设备分别订阅一
种消息队列传输类型;
[0011] 由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备。
[0012] 可选地,通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备之前,该方法还包括:
[0013] 通过第二终端设备确定业务进程信息,业务进程信息包括:业务进程的标识、发布业务进程所使用的消息队列类型;
[0014] 由第二终端设备向业务进程的标识对应的目标服务端设备发送业务进程信息;
[0015] 由目标服务端设备基于业务进程信息建立订阅关系。
[0016] 可选地,通过第二终端设备确定业务进程信息,包括:
[0017] 确定订阅类型,订阅类型包括:泛型订阅类型以及定向订阅类型;
[0018] 若订阅类型为泛型订阅类型,确定发布业务进程所使用的消息队列的类型集合信息,并基于类型集合信息确定业务进程信息;
[0019] 若订阅类型为定向订阅类型,确定发布业务进程所使用的消息队列的类型信息,并基于类型信息确定业务进程信息。
[0020] 可选地,由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备之后,该方法还包括:
[0021] 确定第二终端设备的缓存队列中是否包含传输消息;
[0022] 若否,由第二终端设备回调传输消息,并由第二终端设备存储传输消息以及传输消息的属性信息。
[0023] 可选地,确定第二终端设备的缓存队列中是否包含传输消息之后,该方法还包括:
[0024] 若确定第二终端设备的缓存队列中包含传输消息,由第二终端设备设备存储传输消息以及传输消息的属性信息。
[0025] 可选地,由第二终端设备存储传输消息以及传输消息的属性信息之后,该方法还包括:
[0026] 判定第二终端设备的缓存队列中所有的传输消息是否被对应的第二终端设备接收完毕;
[0027] 若是,删除具有相同消息标识的传输消息。
[0028] 可选地,终端设备中设置有客户端中间件,该方法还包括:
[0029] 终端设备与服务端设备通过客户端中间件发起通信。
[0030] 本申请实施例的另一方面,提供一种分布式数据的传输装置,该装置应用于分布式系统,分布式系统中包括多个终端设备以及多个服务端设备,各服务端设备分别与各终
端设备通信连接,该装置包括:生成模块、传输模块、确定模块、返回模块;
[0031] 生成模块,用于通过第一终端设备生成传输消息以及传输消息的属性信息,传输消息包括消息本体和消息标识,传输消息的属性信息包括:消息队列传输类型以及目标服
务端设备信息;
[0032] 传输模块,用于由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备;
[0033] 确定模块,用于通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备,订阅关系用于指示各消息队列传输类型与终端设备间的映射关系,各终端
设备分别订阅一种消息队列传输类型;
[0034] 返回模块,用于由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备。
[0035] 可选地,确定模块,还用于通过第二终端设备确定业务进程信息,业务进程信息包括:业务进程的标识、发布业务进程所使用的消息队列类型;由第二终端设备向业务进程的标识对应的目标服务端设备发送业务进程信息;由目标服务端设备基于业务进程信息建立订阅关系。
[0036] 可选地,确定模块,具体用于确定订阅类型,订阅类型包括:泛型订阅类型以及定向订阅类型;若订阅类型为泛型订阅类型,确定发布业务进程所使用的消息队列的类型集合信息,并基于类型集合信息确定业务进程信息;若订阅类型为定向订阅类型,确定发布业务进程所使用的消息队列的类型信息,并基于类型信息确定业务进程信息。
[0037] 可选地,确定模块,还用于确定第二终端设备的缓存队列中是否包含传输消息;若否,由第二终端设备回调传输消息,并由第二终端设备存储传输消息以及传输消息的属性信息。
[0038] 可选地,确定模块,还用于若确定第二终端设备的缓存队列中包含传输消息,由第二终端设备存储传输消息以及传输消息的属性信息。
[0039] 可选地,确定模块,还用于判定第二终端设备的缓存队列中所有的传输消息是否被对应的第二终端设备接收完毕;若是,删除具有相同消息标识的传输消息。
[0040] 可选地,终端设备中设置有客户端中间件,在该装置中,终端设备与服务端设备通过客户端中间件发起通信。
[0041] 本申请实施例的另一方面,提供一种分布式系统,包括:存储器、处理器,存储器中存储有可在处理器上运行的计算机程序,处理器执行计算机程序时,实现分布式数据的传输方法的步骤。
[0042] 本申请实施例的另一方面,提供一种计算机可读存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现分布式数据的传输方法的步骤。
[0043] 本申请实施例的有益效果包括:
[0044] 本申请实施例提供的一种分布式数据的传输方法、装置、系统及存储介质中,通过第一终端设备生成传输消息以及传输消息的属性信息,传输消息包括消息本体和消息标识;由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备;通过目标
服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备;由目标服务端设备
将传输消息以消息队列传输类型的方式发送给第二终端设备。其中,订阅关系用于指示各
消息队列传输类型与终端设备间的映射关系,各终端设备分别订阅一种消息队列传输类
型,该在具体实现数据传输的过程中,可以根据订阅关系中确定的传输类型与终端设备之
间的映射关系进行对应的数据传输,避免了以所有可以实现的消息队列传输方式进行传
输,从而可以避免数据的重复发送,进而可以降低整个系统的消息复杂度,减少消息传输的延迟。

附图说明

[0045] 为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0046] 图1为本申请实施例提供的分布式系统的结构示意图;
[0047] 图2为本申请实施例提供的现有技术中分布式系统的数据传输的示意图;
[0048] 图3为本申请实施例提供的现有技术中分布式系统的数据传输的另一示意图;
[0049] 图4为本申请实施例提供的分布式数据的传输方法的流程示意图;
[0050] 图5为本申请实施例提供的分布式数据的传输方法的另一流程示意图;
[0051] 图6为本申请实施例提供的分布式数据的传输方法的另一流程示意图;
[0052] 图7为本申请实施例提供的分布式系统的数据传输的示意图;
[0053] 图8为本申请实施例提供的分布式系统的数据传输的另一示意图;
[0054] 图9为本申请实施例提供的分布式系统的中客户端中间件的工作流程示意图;
[0055] 图10为本申请实施例提供的分布式数据的传输方法的又一流程示意图;
[0056] 图11为本申请实施例提供的分布式数据的传输方法的又一流程示意图;
[0057] 图12为本申请实施例提供的分布式数据的传输装置的结构示意图;
[0058] 图13为本申请实施例提供的分布式系统设备的结构示意图。

具体实施方式

[0059] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施
例的组件可以以各种不同的配置来布置和设计。
[0060] 因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范
围。
[0061] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0062] 在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0063] 下面来具体解释本申请实施例中提供的分布式系统的具体结构关系。
[0064] 图1为本申请实施例提供的分布式系统的结构示意图,请参照图1,分布式系统中包括多个终端设备110以及多个服务端设备120,各服务端设备120分别与各终端设备110通
信连接(图中未画出通信连接关系)。
[0065] 可选地,在该系统中,可以包括多个设备,其中,终端设备110可以是电脑、手机、平板电脑或者专用电子设备等任意类型的电子设备,在该设备中可以设置有客户端,通过该客户端可以实现与该系统中其他的设备之间的信息交互。服务端设备120可以是一个服务
器,或者是多个服务器集群,或者也可以是任一服务器下的一个子区域,在此不作具体限
制。
[0066] 在该系统中,可以包括多个终端设备110以及多个服务端设备120,任一终端设备110均可以与每个服务端设备120通信连接,相应地,任一服务端设备120也均可以与每个终端设备110通信连接。
[0067] 其中,终端设备110中可以包括:业务模块、客户端以及客户端中间件,其中,业务模块可以是用于生成业务信息以及执行业务信息的模块,客户端可以是用于与服务端设备进行信息交互的部分,同一终端设备110中可以包括多个客户端,客户端中间件可以设置在客户端以及服务模块之间,用于进行消息转发、回调以及处理等工作。
[0068] 该系统在工作过程中可以包括以下三个阶段:
[0069] 订阅阶段:由终端设备110向服务端设备120发起进行订阅,订阅之后,服务端设备120可以向终端设备110发送对应的订阅消息。
[0070] 发送阶段:由第一终端设备(终端设备110中的任意一个)生成传输消息,并将该传输消息发送给任一服务端设备120的过程。
[0071] 接收阶段:由第二终端设备(终端设备110中的任意一个)接收存在订阅关系的服务端设备120发送的消息。
[0072] 需要说明的是,图1中的系统结构仅为一种示例,在实际过程中可以设置任意数量的终端设备以及服务端设备,并且,对于每个终端设备也可以设置任意数量的客户端类型。
[0073] 下面来基于现有技术中分布式系统的工作过程来分别解释上述三个阶段。
[0074] 图2为本申请实施例提供的现有技术中分布式系统的数据传输的示意图,请参照图2,图2所示的过程为现有技术中订阅阶段的过程。
[0075] 其中,该系统中包括:终端设备A、终端设备B、终端设备C、服务端设备a以及服务端设备b。
[0076] 需要说明的是,终端设备B、终端设备C可以包括两种类型的客户端,也即是说数据在进行传输时,可以以两种不同形式的消息队列的方式进行传输。
[0077] 以执行某一业务流程为例,例如:报警业务,其中,终端设备A用以发起报警,终端设备B用以进行报警计算、终端设备C用以进行报警存储,其中,终端设备B、终端设备C均需要通过两种客户端分别对对应的服务端设备进行订阅,示例地,终端设备B和终端设备C均包括客户端1和客户端2,其中,客户端1的数据传输类型由服务端设备a支持,客户端2的数据传输类型由服务器b支持。
[0078] 在该过程中终端设备A具体可以是嵌入式设备,终端设备B可以是专门用于进行报警计算的电子设备,终端设备C可以是实现报警存储的计算机设备。服务端设备a可以是
MQTT服务器。服务端设备b可以是RabbitMQ服务器。
[0079] 请参照图2,在现有技术的订阅过程中,终端设备B和终端设备C分别通过客户端1向服务端设备a订阅,终端设备B和终端设备C分别通过客户端2向服务端设备b订阅。
[0080] 下面来结合图2中所示的订阅阶段的关系,解释在发送以及接收阶段,现有技术的工作原理。
[0081] 图3为本申请实施例提供的现有技术中分布式系统的数据传输的另一示意图,请参照图3,该系统中的布局与图2中相同,在此不加重复解释。
[0082] 在发送阶段和接收阶段,对于终端设备A可以将原始数据发送给服务端设备a,由服务端设备a基于订阅关系,将原始数据传输给终端设备B的客户端1,终端设备B可以进行
报警计算,基于原始数据得到报警数据,由于终端设备B中不确定以何种方式发送报警数
据,则可以通过客户端1将报警数据发送给服务端设备a,并通过客户端2将报警数据发送给服务端设备b,服务端设备a基于订阅关系,将报警数据传输给终端设备C的客户端1,服务端设备b基于订阅关系,将报警数据传输给终端设备C的客户端2。
[0083] 结合图2和图3显然可以得到,现有技术中,报警数据存在重复发送的情况,服务端设备a和服务端设备b分别传输了报警数据,在实际实施过程中,报警数据仅仅通过客户端2的格式进行接收,也即是说,终端设备C中的客户端1执行了重复的数据传输,增加了消息传输的延时,增加了整个系统的消息复杂度。
[0084] 为了解决现有技术中存在如图2、图3这样的消息队列重复传输情况,本申请实施例中提出一种分布式数据的传输方法,下面来具体解释本申请实施例中分布式数据的传输
方法的具体实施过程。
[0085] 图4为本申请实施例提供的分布式数据的传输方法的流程示意图,请参照图4,该方法包括:
[0086] S410:通过第一终端设备生成传输消息以及传输消息的属性信息。
[0087] 其中,传输消息包括消息本体和消息标识,传输消息的属性信息包括:消息队列传输类型以及目标服务端设备信息。
[0088] 可选地,该方法的执行主体可以是前述分布式系统,在该分布式系统中,可以通过第一终端设备生成传输消息以及传输消息的属性信息。
[0089] 其中,第一终端设备可以是任意一个终端设备,在前述三个阶段中,用以充当发送阶段的消息发送方。
[0090] 可选地,消息本体具体指的是该消息本身的数据,消息标识可以是用以表征该消息的标识符,例如:消息名称等,在此不作限制。
[0091] 消息队列传输类型具体可以是该传输消息在终端设备与服务端设备之间进行传输时的具体传输类型,也即是可以使用的客户端类型和服务端设备类型,例如:消息队列传输类型可以包括:MQTT(Message Queuing Telemetry Transport,消息列队传输协议)以及RabbitMQ(Rabbit Message Queue,高级消息队列协议)。
[0092] 目标服务端设备信息可以是多个服务端设备中任一服务端的标识,用以表示需要将该传输消息发送给哪个具体的服务端设备。具体可以包括目标服务端设备的类型、地址、用户名、密码等。
[0093] 需要解释的是,服务端设备的类型具体可以基于消息队列传输类型得到,而在同一分布式系统中,通常会包括多个同一类型的服务端设备,基于目标服务端设备信息可以
具体确定使用的是多个同一类型的服务端设备中的哪一个。
[0094] 可选地,传输消息可以是任意任务流程中需要向服务端设备发送进行存储的消息,在此不作具体限制,例如在前述图2、图3的实施例中,原始数据以及报警数据均可以作为传输消息。
[0095] S420:由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备。
[0096] 可选地,确定传输消息的属性信息之后,可以基于消息队列传输类型确定对应需要使用进行发送的客户端,基于目标服务端设备信息确定对应的目标服务端设备,进而可
以通过客户端采用消息队列传输类型将传输消息发送给目标服务端设备。
[0097] 例如:客户端具体可以是MQTT客户端,服务端设备具体可以是MQTT服务器;或者,客户端具体可以是RabbitMQ客户端,服务端设备具体可以是RabbitMQ服务器。
[0098] S430:通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备。
[0099] 其中,订阅关系用于指示各消息队列传输类型与终端设备间的映射关系,各终端设备分别订阅一种消息队列传输类型。
[0100] 可选地,第一终端设备将传输消息发送给目标服务端设备之后,目标服务端设备可以根据预先配置的订阅关系以及消息标识确定第二终端设备。
[0101] 其中,在订阅阶段时,目标服务端设备接收到订阅消息之后,可以存储有该订阅关系,在该订阅关系中可以用于指示各消息队列传输类型与终端设备间的映射关系,例如:对于MQTT类型的消息,发送的目标可以是第二终端设备,则可以确定MQTT类型的消息与第二终端设备的映射关系,进而在目标服务端设备接收到MQTT类型的消息之后,可以确定需要
将该类型的消息发送给第二终端设备。
[0102] 其中,订阅关系中具体可以以消息标识的方式记录对应的消息,例如:可以记录消息标识、消息队列传输类型以及待发送的终端设备,在目标客户端接收到传输消息之后,可以基于传输消息中的消息标识确定对应的记录,进而基于消息队列传输类型确定待发送的终端设备。
[0103] S440:由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备。
[0104] 可选地,目标服务端设备确定第二终端设备之后,可以将传输消息以对应的消息队列传输类型发送给第二终端设备,具体可以是将该传输消息通过第二终端设备对应的客
户端进行消息传输。
[0105] 例如:若目标服务端设备为MQTT服务器,则消息队列传输类型为MQTT类型,则可以将该传输消息发送给第二终端设备的MQTT客户端。
[0106] 本申请实施例提供的一种分布式数据的传输方法中,通过第一终端设备生成传输消息以及传输消息的属性信息,传输消息包括消息本体和消息标识;由第一终端设备采用
消息队列传输类型将传输消息发送给目标服务端设备;通过目标服务端设备根据预先配置
的订阅关系以及消息标识确定第二终端设备;由目标服务端设备将传输消息以消息队列传
输类型的方式发送给第二终端设备。其中,订阅关系用于指示各消息队列传输类型与终端
设备间的映射关系,各终端设备分别订阅一种消息队列传输类型,该在具体实现数据传输
的过程中,可以根据订阅关系中确定的传输类型与终端设备之间的映射关系进行对应的数
据传输,避免了以所有可以实现的消息队列传输方式进行传输,从而可以避免数据的重复
发送,进而可以降低整个系统的消息复杂度,减少消息传输的延迟。
[0107] 下面来具体解释本申请实施例中提供的分布式数据的传输方法中订阅阶段的具体实施过程。
[0108] 图5为本申请实施例提供的分布式数据的传输方法的另一流程示意图,请参照图5,通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备之前,该方法还包括:
[0109] S510:通过第二终端设备确定业务进程信息。
[0110] 其中,业务进程信息包括:业务进程的标识、发布业务进程所使用的消息队列类型。
[0111] 可选地,第二终端设备可以确定实际执行的业务进程,具体可以是确定业务进程信息,业务进程具体可以是任意类型的业务过程,例如:前述所示的报警业务,并不以此为限,在执行不同业务时,可以具有不同的业务进程信息,传输消息可以是业务进程中的需要进行传输的消息数据。
[0112] 业务进程信息中,业务进程的标识可以是可以用于指示对应的业务阶段,例如:前述的报警计算阶段或者报警存储阶段,在该阶段中可以对应有与第二终端设备对应的目标服务端设备,基于该业务进程的标识可以确定在之后的接收阶段,向第二终端设备发送的
目标服务端设备,发布业务进程所使用的消息队列类型可以是在之后发送阶段由其他终端
设备(如第一终端设备)向服务端设备进行传输时使用的消息队列传输类型。
[0113] S520:由第二终端设备向业务进程的标识对应的目标服务端设备发送业务进程信息。
[0114] 可选地,第二终端设备得到业务进程的标识之后,可以向业务进程的标识对应的目标服务端设备发送业务进程信息,该过程也即是订阅过程,该业务进程信息也即是订阅
消息。
[0115] S530:由目标服务端设备基于业务进程信息建立订阅关系。
[0116] 可选地,目标服务端设备接收到业务进程信息之后,可以基于业务进程信息中的发布业务进程所使用的消息队列类型以及来源(也即是第二终端设备)建立订阅关系。
[0117] 需要说明的是,业务进程信息中还可以包括传输消息的消息标识,可以基于传输消息的消息标识、消息队列类型以及第二终端设备建立订阅关系,在之后的发送阶段,目标服务端设备可以基于该订阅关系向第二终端设备发送传输消息。
[0118] 下面来解释本申请实施例中提供的分布式数据的传输方法中确定业务进程信息的具体实施过程。
[0119] 图6为本申请实施例提供的分布式数据的传输方法的另一流程示意图,请参照图6,通过第二终端设备确定业务进程信息,包括:
[0120] S610:确定订阅类型。
[0121] 其中,订阅类型包括:泛型订阅类型以及定向订阅类型。
[0122] 可选地,订阅类型具体指的是第二终端设备向服务端设备进行订阅时的订阅类型,泛型订阅类型具体可以是指定消息类型但不指定产生消息的具体终端设备的订阅。定
向订阅类型可以是既指定消息类型又指定产生消息的具体终端设备的订阅。
[0123] 需要说明的是,可以基于实际需求或者用户的主动设置确定上述订阅类型。
[0124] 若订阅类型为泛型订阅类型,S620:确定发布业务进程所使用的消息队列的类型集合信息,并基于类型集合信息确定业务进程信息。
[0125] 可选地,若订阅类型为泛型订阅类型,可以确定发布业务进程所使用的消息队列的类型集合信息,从该类型集合信息中遍历,找到所有产生该订阅消息的消息主题的业务
进程发布消息所用的MQ类型的最小集合,确定该最小集合之后,可以用MQ类型的最小集合
进行订阅,也即是确定业务进程信息。
[0126] 若订阅类型为定向订阅类型,S630:确定发布业务进程所使用的消息队列的类型信息以及业务进程信息。
[0127] 需要说明的是,该业务进程信息具体可以包括目标业务进程的唯一标识。
[0128] 可选地,若订阅类型为定向订阅类型,则可以直接找到目标业务进程发布消息所用的MQ类型,然后基于该MQ类型进行订阅,即定向订阅类型通常只用到一种MQ类型,不需要重复接收消息。
[0129] 需要说明的是,上述对分布式数据的传输方法的解释仅为一种示例,在实际实施的过程中可以结合图2‑图3中采用方式搭配使用,例如可以选择是否对传输方式进行优化,若选择是,则采用上述S410‑S440的过程进行传输;相对地,若选择否,可以继续采用图2‑图
3的方式进行消息传输。并不以本申请实施例中采用的方式作为局限。
[0130] 可选地,由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备之后,该方法还包括:确定第二终端设备的缓存队列中是否包含传输消息;若否,由第二终端设备回调传输消息,并由第二终端设备存储传输消息以及传输消息的属性信息。
[0131] 其中,第二终端设备中可以包括缓存队列,该缓存队列可以是业务模块的缓存队列,目标服务端在对第二终端设备发送传输消息之后,可以在缓存队列中缓存有传输消息,为了避免漏发错发,可以在发送完成之后检查缓存队列中是否包含该传输消息,若是,则可以确定已经进行了回调,若否,则可以确定未进行回调,可以由第二终端设备回调该传输消息。
[0132] 需要说明的是,回调的过程具体可以是将第二终端设备接收到的传输消息暂存至业务模块的缓存队列的过程。
[0133] 回调完成后,业务模块的缓存队列中包括该传输消息,可以由第二终端设备存储传输消息以及传输消息的属性信息,其中,在进行存储时具体可以存储至存储队列中,存储队列与缓存队列为第二终端设备中的两个不同的队列,存储队列可以用于记录目标服务端
设备已经发送了的消息,可以实现消息的持久化存储。
[0134] 可选地,确定第二终端设备的缓存队列中是否包含传输消息之后,该方法还包括:若确定第二终端设备的缓存队列中包含传输消息,由第二终端设备存储传输消息以及传输
消息的属性信息。
[0135] 其中,若确定第二终端设备的缓存队列中包含传输消息,则可以确定目标服务端设备发送成功,可以由第二终端设备存储传输消息以及传输消息的属性信息至存储队列
中。
[0136] 可选地,由第二终端设备存储传输消息以及传输消息的属性信息之后,该方法还包括:判定第二终端设备的缓存队列中所有的传输消息是否被第二终端设备接收完毕;若
是,删除具有相同消息标识的传输消息。
[0137] 其中,可以由第二终端设备判定其缓存队列中所有的传输消息是否接收完毕,具体可以判定是否所有的传输消息都在缓存队列中,若是,可以清除缓存队列,具体可以是删除具有相同消息标识的传输消息,从而减少缓存压力。
[0138] 可选地,终端设备中设置有客户端中间件,该方法还包括:终端设备与服务端设备通过客户端中间件发起通信。
[0139] 其中,客户端中间件具体可以是以软件程序的形式设置在终端设备中,基于该客户端中间件可以建立终端设备本身与其上所包括的客户端之间的连接,进而可以通过客户
端中间件实现终端设备与服务端设备之间的连接。
[0140] 下面来基于本申请实施例中提供的分布式系统的数据传输关系来解释本申请的具体实施过程。
[0141] 图7为本申请实施例提供的分布式系统的数据传输的示意图,请参照图7,可以对比图7与图2,图7为本申请实施例中的订阅阶段额过程。
[0142] 其中,该系统中包括:终端设备A、终端设备B、终端设备C、服务端设备a以及服务端设备b。各设备与图2中相同,在此不加赘述。
[0143] 继续以前述报警业务为例,在订阅时,由于终端设备B需要以客户端1下的格式接收原始数据,则可以仅通过客户端1对服务端设备a进行订阅;相应地,由于终端设备C需要以客户端2下的格式接收报警数据,则可以仅通过客户端2对服务端设备b进行订阅。
[0144] 下面来结合图7中所示的订阅阶段的关系,解释在发送以及接收阶段本申请实施例的工作原理。
[0145] 图8为本申请实施例提供的分布式系统的数据传输的另一示意图,请参照图8,请对比参照图3,该系统中的布局与图7中相同,在此不加重复解释。
[0146] 在发送阶段和接收阶段,对于终端设备A可以将原始数据发送给服务端设备a,由服务端设备a基于订阅关系,将原始数据传输给终端设备B的客户端1,终端设备B可以进行
报警计算,基于原始数据得到报警数据,终端设备B可以通过客户端2将报警数据发送给服
务端设备b,服务端设备b基于订阅关系,将报警数据传输给终端设备C的客户端2。
[0147] 基于图8和图3的区别,可以得到,本申请实施例中采用的订阅、发送以及接收的过程,可以避免消息的重复发送,减小整个系统的工作压力以及复杂程度。
[0148] 下面来具体解释本申请实施例中提供的客户端中间件的具体工作流程。
[0149] 图9为本申请实施例提供的分布式系统的中客户端中间件的工作流程示意图,请参照图9,该方法的执行主体可以是第二终端设备,第二终端设备中可以设置该客户端中间件,该方法包括:
[0150] S901:确定业务进程信息。
[0151] 可选地,该业务进程信息可以是用户配置后通过加载的方式得到的,在此不作具体限制。
[0152] S902:判断是否开启数据传输优化。如果开启,则执行S903,如果不开启,则执行S904。
[0153] 可选地,具体可以通过系统中设置的管理模块进行控制,该管理模块可以是对终端设备进行接口配置的模块,具体可以是一个控制设备,可以通过管理模块的接口或全局
配置、注册表等方式来进行判断是否开启数据传输优化,或者也可以人为进行优化与否的
设定,若开启优化,则会执行前述S410‑S440的步骤,若不开启优化则继续执行如图2‑图3所示的过程。
[0154] S903:将业务进程的标识、发布用的消息队列传输类型发送给管理模块。
[0155] 其中,对于需要发送给多个服务端设备的订阅消息,还可以生成消息主题或者消息标识进行标注。
[0156] S904:确定使用的客户端。
[0157] 其中,客户端的类型可以动态库的方式提供,也可以作为静态库直接编译到业务进程中,具体可以基于用户的实际使用需求进行客户端类型的确定。
[0158] S905:从管理模块获取全量数据。
[0159] 其中,全量数据可以指的是全部的服务端设备的相关信息以及全部的业务进程信息等,具体可以是管理模块对所有终端设备发送的业务进程的标识、发布用的消息队列传
输类型进行汇总之后得到的数据。
[0160] S906:基于全量数据进行消息订阅。
[0161] 可选地,得到上述全量数据之后,可以基于该终端设备在实际执行的业务进程来对应进行订阅,也即是执行前述S510‑S530的具体实施步骤。
[0162] 下面来具体解释基于上述客户端中间件实现的发送阶段以及接收阶段的具体实施步骤。
[0163] 图10为本申请实施例提供的分布式数据的传输方法的又一流程示意图,请参照图10,客户端中间件在实现消息的发送时,具体方法包括:
[0164] S1001:生成传输消息。
[0165] S1002:判断是否开启数据传输优化。
[0166] 如果开启,则执行S1003,否则执行S1004。
[0167] S1003:根据发布消息所用的消息队列传输类型以及对应的服务端设备信息确定目标服务器。
[0168] S1004:获取所有的消息队列传输类型和对应的服务端设备信息,确定所有涉及的服务端设备为目标服务端设备。
[0169] S1005:向目标服务端设备发送传输消息。
[0170] 上述步骤的具体实施过程在前述已经进行了具体解释,在此不加赘述。
[0171] 图11为本申请实施例提供的分布式数据的传输方法的又一流程示意图,请参照图11,客户端中间件在实现消息的接收时,具体方法包括:
[0172] S1101:从目标服务端设备接收传输消息。
[0173] S1102:确定传输消息中的消息本体以及消息标识。
[0174] S1103:判断是否开启数据传输优化。
[0175] 如果开启,则执行S1104,否则执行S1105。
[0176] S1104:将该传输消息回调给业务模块进行应用。
[0177] S1105:判定该传输消息是否已经回调过。
[0178] 具体方法为从缓存队列中查找是否已有包含该传输消息的标识的记录。
[0179] 如果有,则执行S1107,否则执行S1106。
[0180] S1106:将该传输消息回调给业务模块进行应用。
[0181] S1107:将该传输消息加入到存储队列。
[0182] S1108:若所有订阅的传输消息被对应的第二客户端设备接收完毕,从缓存队列中删除具有相同消息标识的传输消息。
[0183] 可选地,业务模块具体可以是终端设备中用于执行该业务的具体部分,例如:对于前述报警计算,可以由报警计算的业务模块进行执行。
[0184] 回调具体可以是在终端设备接收到对应的传输消息之后,将该传输消息发送给业务模块进行执行的过程。
[0185] 上述步骤的具体实施过程在前述已经进行了具体解释,在此不加赘述。
[0186] 需要说明的是,S1001‑S1005以及S1101‑S1108的步骤均可以由客户端中间件来实现,其中需要服务端设备辅助完成的步骤可以通过预先设置好的监听进程由服务端设备获取后发送给该客户端中间件执行实现,例如上述S1105‑S1108的过程,可以是由服务端设备执行完成后通过监听进程发送给客户端中间件实现。
[0187] 可选地,为了使得订阅方可以任意选择泛型订阅或定向订阅,而发布方又无需关心这两种订阅的区别,业务模块在发布消息时,MQ客户端中间件对于业务模块传入的消息
主题需要进行改动,以方便订阅方在泛型订阅时进行通配。由于每种类型的MQ的通配规则
不同,因此MQ客户端中间件需要针对不同类型的MQ执行不同的改动策略。
[0188] 以MQTT和RabbitMQ为例:
[0189] M Q 类型 改动规则M QTT 新主题 = 原主题 / 业务进程 标识 (其中 / 是 M QTT 的主题分隔符)
RabbitMQ 新主题 = 原主题 . 业务进程 标识 (其中 . 是 RabbitMQ 的主题分隔符)
[0190] 而订阅方在进行订阅时,MQ客户端中间件对业务模块传入的消息主题也做改动,且泛型订阅和定向订阅时有所不同,在泛型订阅时增加通配符,在定向订阅时指明目标业
务进程的标识,从而达到泛型订阅和定向订阅的目的。
[0191] 以MQTT和RabbitMQ为例:
[0192] M Q 类型 订阅类型 改动规则M QTT 泛型订阅 新主题 = 原主题 /+ (其中 / 是 M QTT 的主题分隔符, + 是 M QTT 的单层通配符)M QTT 定向订阅 新主题 = 原主题 / 目标业务进程 标识 (其中 / 是 M QTT 的主题分隔符)RabbitMQ 泛型订阅 新主题 = 原主题 .* (其中 . 是 RabbitMQ 的主题分隔符, * 是 RabbitMQ 的单层通配符)RabbitMQ 定向订阅 新主题 = 原主题 . 目标业务进程 标识 (其中 . 是 RabbitMQ 的主题分隔符)[0193] 需要说明的是,除了上述示例中的MQ类型,还可以包括:Kafka、Kestrel、
RocketMQ、XMPP等类型,在此不作具体限制,可以基于实际需求进行选择。
[0194] 下述对用以执行的本申请所提供的分布式数据的传输方法对应的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
[0195] 图12为本申请实施例提供的分布式数据的传输装置的结构示意图,请参照图12,该装置包括:生成模块210、传输模块220、确定模块230、返回模块240;
[0196] 生成模块210,用于通过第一终端设备生成传输消息以及传输消息的属性信息,传输消息包括消息本体和消息标识,传输消息的属性信息包括:消息队列传输类型以及目标
服务端设备信息;
[0197] 传输模块220,用于由第一终端设备采用消息队列传输类型将传输消息发送给目标服务端设备;
[0198] 确定模块230,用于通过目标服务端设备根据预先配置的订阅关系以及消息标识确定第二终端设备,订阅关系用于指示各消息队列传输类型与终端设备间的映射关系,各
终端设备分别订阅一种消息队列传输类型;
[0199] 返回模块240,用于由目标服务端设备将传输消息以消息队列传输类型的方式发送给第二终端设备。
[0200] 可选地,确定模块230,还用于通过第二终端设备确定业务进程信息,业务进程信息包括:业务进程的标识、发布业务进程所使用的消息队列类型;由第二终端设备向业务进程的标识对应的目标服务端设备发送业务进程信息;由目标服务端设备基于业务进程信息
建立订阅关系。
[0201] 可选地,确定模块230,具体用于确定订阅类型,订阅类型包括:泛型订阅类型以及定向订阅类型;若订阅类型为泛型订阅类型,确定发布业务进程所使用的消息队列的类型集合信息,并基于类型集合信息确定业务进程信息;若订阅类型为定向订阅类型,确定发布业务进程所使用的消息队列的类型信息,并基于类型信息确定业务进程信息。
[0202] 可选地,确定模块230,还用于确定第二终端设备的缓存队列中是否包含传输消息;若否,由第二终端设备回调传输消息,并由第二终端设备存储传输消息以及传输消息的属性信息。
[0203] 可选地,确定模块230,还用于若确定第二终端设备的缓存队列中包含传输消息,由第二终端设备存储传输消息以及传输消息的属性信息。
[0204] 可选地,确定模块230,还用于判定第二终端设备的缓存队列中所有的传输消息是否被第二终端设备接收完毕;若是,删除具有相同消息标识的传输消息。
[0205] 可选地,终端设备中设置有客户端中间件,在该装置中,终端设备与服务端设备通过客户端中间件发起通信。
[0206] 上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
[0207] 以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器,或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system‑on‑a‑chip,简称SOC)的形式实现。
[0208] 图13为本申请实施例提供的分布式系统设备的结构示意图,请参照图13,分布式系统包括:存储器310、处理器320,存储器310中存储有可在处理器320上运行的计算机程
序,处理器320执行计算机程序时,实现分布式数据的传输方法的步骤。
[0209] 可选地,该分布式系统的结构具体可以指的是系统中任一设备的结构,例如:终端设备或者服务端设备的结构。
[0210] 在执行上述方法时,可以在对应的设备执行对应的步骤时,基于该设备的存储器310和处理器320工作完成。
[0211] 本申请实施例的另一方面,还提供一种计算机可读存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现分布式数据的传输方法的步骤。
[0212] 在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连
接,可以是电性,机械或其它的形式。
[0213] 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络
单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0214] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0215] 上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机
设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:
Read‑Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:
RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0216] 上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本
申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
[0217] 以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。