一种数据传输方法及MQTT服务器
技术领域
本发明涉及数据传输技术领域,具体涉及一种数据传输方法及MQTT服务器。
背景技术
随着科学技术的不断发展,物联网逐渐被广泛应用。在实际应用中,物联网与互联网之间需要数据传输,具体通过消息队列遥测传输(Message Queuing TelemetryTransport,MQTT)协议进行数据传输。
目前物联网向互联网发送数据的方式为:物联网端通过MQTT Client将数据发布至MQTT Server,互联网端从MQTT Server订阅数据并将数据写入诸如Kafka的消息中间件。但是一方面,由于物联网环境中所产生的数据量极大,而MQTT Server的数据吞吐量有限,数据传输时间长和效率低。另一方面,互联网端需先订阅数据,再将数据写入消息中间件,数据传输过程繁琐,容易造成数据丢失。
因此,目前物联网和互联网之间的数据传输方式存在数据传输时间长、传输效率低和数据容易丢失等问题。
发明内容
有鉴于此,本发明实施例提供一种数据传输方法及MQTT服务器,以解决目前物联网和互联网之间的数据传输方式存在数据传输时间长、传输效率低和数据容易丢失等问题。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开一种数据传输方法,适用于MQTT服务器集群中的任一MQTT服务器,所述方法包括:
MQTT服务器接收物联网客户端发送的数据传输请求,所述数据传输请求为数据发布请求或数据订阅请求,所述物联网客户端通过负载均衡与所述MQTT服务器连接;
若所述数据传输请求为所述数据发布请求,将所述数据发布请求携带的物联网数据直接发送至消息中间件,所述数据发布请求携带所述物联网数据和所述物联网数据对应的数据主题。
优选的,所述方法还包括:
若所述数据传输请求为所述数据订阅请求,接收互联网客户端发送的与订阅主题对应的互联网数据,所述数据订阅请求携带所述订阅主题,所述互联网数据由所述互联网客户端通过预设应用程序编程接口API发送;
将所述互联网数据发送给所述物联网客户端。
优选的,所述将所述数据发布请求携带的物联网数据发送至消息中间件,包括:
根据所述数据发布请求携带的物联网数据对应的数据主题,确定消息中间件中与所述数据主题匹配的消息中间件主题;
将所述物联网数据写入所述消息中间件主题。
优选的,所述接收互联网客户端发送的与订阅主题对应的互联网数据,包括:
接收互联网客户端发送的与订阅主题对应的互联网数据;
或者,
接收所述MQTT服务器集群中的其它MQTT服务器发送的所述互联网数据,所述互联网客户端将所述互联网数据发送给所述其它MQTT服务器。
本发明实施例第二方面公开一种MQTT服务器,所述MQTT服务器包括:
接收单元,用于接收物联网客户端发送的数据传输请求,所述数据传输请求为数据发布请求或数据订阅请求,所述物联网客户端通过负载均衡与所述MQTT服务器连接;
发送单元,用于若所述数据传输请求为所述数据发布请求,将所述数据发布请求携带的物联网数据直接发送至消息中间件,所述数据发布请求携带所述物联网数据和所述物联网数据对应的数据主题。
优选的,所述MQTT服务器还包括:
所述接收单元还用于若所述数据传输请求为所述数据订阅请求,接收互联网客户端发送的与订阅主题对应的互联网数据,所述数据订阅请求携带所述订阅主题,所述互联网数据由所述互联网客户端通过预设应用程序编程接口API发送;
所述发送单元还用于将所述互联网数据发送给所述物联网客户端。
优选的,所述发送单元包括:
确定模块,用于根据所述数据发布请求携带的物联网数据对应的数据主题,确定消息中间件中与所述数据主题匹配的消息中间件主题;
写入模块,用于将所述物联网数据写入所述消息中间件主题。
优选的,所述接收单元具体用于:接收互联网客户端发送的与订阅主题对应的互联网数据,或者,接收所述MQTT服务器集群中的其它MQTT服务器发送的所述互联网数据,所述互联网客户端将所述互联网数据发送给所述其它MQTT服务器。
基于上述本发明实施例提供的一种数据传输方法及MQTT服务器,该方法适用于MQTT服务器集群中的任一MQTT服务器,该方法包括:MQTT服务器接收物联网客户端发送的数据传输请求,物联网客户端通过负载均衡与MQTT服务器连接;若数据传输请求为数据发布请求,将数据发布请求携带的物联网数据直接发送至消息中间件。本方案中,物联网客户端通过负载均衡与MQTT服务器集群中的任一MQTT服务器连接,采用MQTT服务器集群的方式实现性能水平扩展,单个MQTT服务器宕机对物联网客户端没有影响。MQTT接收到物联网客户端发送的数据发布请求时,将数据发布请求携带的物联网数据直接发送至消息中间件,不需要互联网先订阅数据再将数据写入消息中间件,缩短数据传输时间、提高数据传输效率和避免数据在传输过程中丢失。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种数据传输方法的流程图;
图2为本发明实施例提供的MQTT服务器集群的架构示意图;
图3为本发明实施例提供的将物联网数据直接发送至消息中间件的架构示意图;
图4为本发明实施例提供的数据传输方法的架构示意图;
图5为本发明实施例提供的一种MQTT服务器的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,物联网端通过MQTT Client将数据发布至MQTT Server,互联网端从MQTT Server订阅数据并将数据写入诸如Kafka的消息中间件。但是由于物联网环境中所产生的数据量极大,而MQTT Server的数据吞吐量有限,数据传输时间长和效率低。同时,互联网端需先订阅数据,再将数据写入消息中间件,数据传输过程繁琐,容易造成数据丢失。
因此,本发明实施例提供一种数据传输方法及MQTT服务器,MQTT接收到物联网客户端发送的数据发布请求时,将数据发布请求携带的物联网数据直接发送至消息中间件,不需要互联网先订阅数据再将数据写入消息中间件,以缩短数据传输时间、提高数据传输效率和避免数据在传输过程中丢失。
本发明实施例中涉及的MQTT服务器集成了MQTT Broker和消息中间件的发送端,例如:对于HiaMQTT服务器,集成了MQTT Broker和Kafka Producer。
其中,MQTT Broker为MQTT服务器的核心部分的代称,主要负责协议处理和消息转发。KafkaProducer为消息中间件Kafka的生产者,可将消息发送给Kafka。
参见图1,示出了本发明实施例提供的一种数据传输方法,所述数据传输方法适用于MQTT服务器集群中的任一MQTT服务器,所述数据传输方法包括以下步骤:
步骤S101:MQTT服务器接收物联网客户端发送的数据传输请求。
需要说明的是,所述数据传输请求为数据发布请求或数据订阅请求。预先构建包含多个MQTT服务器的MQTT服务器集群,物联网客户端通过传输控制协议(TransmissionControl Protocol,TCP)连接到MQTT服务器。
在具体实现步骤S101的过程中,当所述物联网客户端需要连接MQTT服务器时,所述物联网客户端通过负载均衡与所述MQTT服务器集群中的任一MQTT服务器连接,例如:通过HAProxy所述MQTT服务器集群中的任一MQTT服务器连接,所述物联网客户端通过所述MQTT服务器与互联网进行数据交互。
为更好解释说明上述涉及的物联网客户端通过负载均衡与MQTT服务器集群中的任一MQTT服务器连接的过程,通过图2示出的MQTT服务器集群的架构示意图进行举例说明。需要说明的是,所述图2示出的内容仅用于举例说明。
在所述图2中,物联网客户端(MQTT client)通过负载均衡(Load Blance)与HiaMQTT集群中的任一HiaMQTT(即MQTT服务器)连接,MQTT client通过与之连接的HiaMQTT将数据发送给Kafka集群中的kafka。
步骤S102:若所述数据传输请求为所述数据发布请求,将所述数据发布请求携带的物联网数据直接发送至消息中间件。
需要说明的是,所述数据发布请求携带所述物联网数据和所述物联网数据对应的数据主题。当所述物联网客户端需要将物联网数据发送至互联网时,所述物联网客户端调用publish方法即可完成数据发送。
进一步需要说明的是,消息中间件包含多个不同的消息中间件主题,物联网客户端将所述物联网数据发送至互联网指的是:通过所述MQTT服务器将所述物联网数据写入消息中间件的消息中间件主题中,互联网客户端可调用消息中间件主题中的所述物联网数据。
在具体实现步骤S102的过程中,根据所述数据发布请求携带的物联网数据对应的数据主题,确定消息中间件中与所述数据主题匹配的消息中间件主题,即确定与所述数据主题一致的消息中间件主题。将所述物联网数据写入所述消息中间件主题。
为更好解释上述涉及的将所述物联网数据写入所述消息中间件主题,通过图3示出的将物联网数据直接发送至消息中间件的架构示意图进行举例说明,需要说明的是,所述图3示出的内容仅用于举例说明。
在所述图3中,物联网客户端向HiaMQTT发送携带所述物联网数据的数据发布请求,所述HiaMQTT中集成了MQTT Broker和Kafka Producer。所述HiaMQTT直接将所述物联网数据写入kafka中,如通过KafkaProducer将物联网数据写入kafka中。
步骤S103:若所述数据传输请求为所述数据订阅请求,接收互联网客户端发送的与订阅主题对应的互联网数据。
需要说明的是,当所述物联网客户端需要获取互联网数据时,所述物联网客户端调用subscribe方法订阅与订阅主题对应的互联网数据。
进一步需要说明的是,由前述内容可知,所述物联网客户端通过负载均衡与所述MQTT服务器集群中的任一MQTT服务器连接。当所述物联网订阅所述互联网数据时,所述互联网客户端通过预设程序编程接口(Application Programming Interface,API)将所述互联网数据下发至所述MQTT服务器集群中的任一MQTT服务器。所述互联网客户端可能将所述互联网数据下发至与所述物联网客户端连接的MQTT服务器,也可能将所述互联网数据下发至所述MQTT服务器集群中的其它MQTT服务器。
基于上述数据发布请求和数据订阅请求的说明可知:物联网客户端可直接采用MQTT协议传输物联网数据,而互联网客户端可以通过API传输互联网数据,使得物联网数据和互联网数据能够采用各自的传输通道传输,由此在物联网环境和互联网环境实现双向数据传输通道分离,同时,采用MQTT服务器集群的方式实现性能水平扩展,单个MQTT服务器宕机对物联网客户端没有影响。
因此,在具体实现步骤S103的过程中,所述MQTT服务器接收互联网客户端发送的与订阅主题对应的互联网数据,或者,接收所述MQTT服务器集群中的其它MQTT服务器发送的所述互联网数据。
需要说明的是,所述MQTT服务器集群中包含路由表,该路由表记录所述物联网客户端对应的订阅主题和与所述物联网客户端连接的MQTT服务器。
例如:假设存在三个物联网客户端,分别为client1、client2和client3。所述MQTT服务器集群中包含三个MQTT服务器,分别为node1、node2和node3。client1与node1连接,client2与node1连接,client3与node3连接,client1、client2和client3的订阅主题分别为topic A、topic B和topic A。
当所述互联网客户端通过API将topic A对应的互联网数据下发至node1时,结合MQTT服务器集群中的路由表,确定订阅topic A对应的互联网数据的物联网客户端为client1和client3。node1直接将所述互联网数据发送给client1,node1将所述互联网数据转发给node3,所述node3再将所述互联网数据发送给client3。
步骤S104:将所述互联网数据发送给所述物联网客户端。
为更好解释上述步骤S101至步骤S104示出的内容,通过图4示出的数据传输方法的架构示意图进行举例说明,需要说明的是,所述图4示出的内容仅用于举例说明。
在所述图4中,消息中间件Kafka包括三个消息中间件主题,分别为Topic A、TopicB和Topic C。当MQTT client需要将物联网数据发送给互联网客户端时,MQTT client将所述物联网数据发送给HiaMQTT,HiaMQTT确定Kafka中与所述物联网数据的数据主题匹配的消息中间件主题,直接将所述物联网数据写入所述消息中间件主题,以供互联网客户端调用所述消息中间件主题中的数据。
当MQTT client需要订阅互联网数据时,互联网客户端将所述互联网数据下发至HiaMQTT中,所述HiaMQTT将所述互联网数据发送给MQTT client。
在本发明实施例中。物联网客户端通过负载均衡与MQTT服务器集群中的任一MQTT服务器连接。MQTT接收到物联网客户端发送的数据发布请求时,将数据发布请求携带的物联网数据直接发送至消息中间件,不需要互联网先订阅数据再将数据写入消息中间件,缩短数据传输时间、提高数据传输效率和避免数据在传输过程中丢失。MQTT接收到物联网客户端发送的数据订阅请求时,MQTT接收互联网客户端和MQTT服务器集群中的其它MQTT服务器发送的与订阅主题对应的互联网数据,将互联网数据发送给物联网客户端。互联网客户端不管将互联网数据消息下发至MQTT服务器集群中的任一MQTT服务器,都保证将互联网数据发送给物联网客户端。
与上述本发明实施例提供的一种数据传输方法相对应,参见图5,本发明实施例还提供了一种MQTT服务器的结构框图,所述MQTT服务器包括:接收单元501和发送单元502。
接收单元501,用于接收物联网客户端发送的数据传输请求,所述数据传输请求为数据发布请求或数据订阅请求,所述物联网客户端通过负载均衡与所述MQTT服务器连接。
发送单元502,用于若所述数据传输请求为所述数据发布请求,将所述数据发布请求携带的物联网数据直接发送至消息中间件,所述数据发布请求携带所述物联网数据和所述物联网数据对应的数据主题。
优选的,所述接收单元501还用于若所述数据传输请求为所述数据订阅请求,接收互联网客户端发送的与订阅主题对应的互联网数据,所述数据订阅请求携带所述订阅主题,所述互联网数据由所述互联网客户端通过预设API发送。
在具体实现中,所述接收单元501具体用于:接收互联网客户端发送的与订阅主题对应的互联网数据,或者,接收所述MQTT服务器集群中的其它MQTT服务器发送的所述互联网数据,所述互联网客户端将所述互联网数据发送给所述其它MQTT服务器。
相应的,所述发送单元501还用于将所述互联网数据发送给所述物联网客户端。
在本发明实施例中。物联网客户端通过负载均衡与MQTT服务器集群中的任一MQTT服务器连接,采用MQTT服务器集群的方式实现性能水平扩展,单个MQTT服务器宕机对物联网客户端没有影响。MQTT接收到物联网客户端发送的数据发布请求时,将数据发布请求携带的物联网数据直接发送至消息中间件,不需要互联网先订阅数据再将数据写入消息中间件,缩短数据传输时间、提高数据传输效率和避免数据在传输过程中丢失。
MQTT接收到物联网客户端发送的数据订阅请求时,MQTT接收互联网客户端和MQTT服务器集群中的其它MQTT服务器发送的与订阅主题对应的互联网数据,将互联网数据发送给物联网客户端。互联网客户端不管将互联网数据消息下发至MQTT服务器集群中的任一MQTT服务器,都保证将互联网数据发送给物联网客户端。
优选的,结合图5中示出的内容,所述发送单元502包括确定模块和写入模块。各个模块的执行原理如下:
确定模块,用于根据所述数据发布请求携带的物联网数据对应的数据主题,确定消息中间件中与所述数据主题匹配的消息中间件主题。
写入模块,用于将所述物联网数据写入所述消息中间件主题。
综上所述,本发明实施例提供一种数据传输方法及MQTT服务器,该方法适用于MQTT服务器集群中的任一MQTT服务器,该方法包括:MQTT服务器接收物联网客户端发送的数据传输请求,物联网客户端通过负载均衡与MQTT服务器连接;若数据传输请求为数据发布请求,将数据发布请求携带的物联网数据直接发送至消息中间件。本方案中,物联网客户端通过负载均衡与MQTT服务器集群中的任一MQTT服务器连接,采用MQTT服务器集群的方式实现性能水平扩展,单个MQTT服务器宕机对物联网客户端没有影响。MQTT接收到物联网客户端发送的数据发布请求时,将数据发布请求携带的物联网数据直接发送至消息中间件,不需要互联网先订阅数据再将数据写入消息中间件,缩短数据传输时间、提高数据传输效率和避免数据在传输过程中丢失。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。