CN114978683A - 一种基于mqtt协议的反向代理系统 - Google Patents
一种基于mqtt协议的反向代理系统 Download PDFInfo
- Publication number
- CN114978683A CN114978683A CN202210555012.5A CN202210555012A CN114978683A CN 114978683 A CN114978683 A CN 114978683A CN 202210555012 A CN202210555012 A CN 202210555012A CN 114978683 A CN114978683 A CN 114978683A
- Authority
- CN
- China
- Prior art keywords
- message
- public network
- topic
- node
- http request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0281—Proxies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/26—Special purpose or proprietary protocols or architectures
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于MQTT协议的反向代理系统,包括公网和内网;所述公网中部署有Broker集群和公网物理网系统,所述公网物联网管理系统作为Pub l i sher接入到Broker集群中,同时作为公网Subscr i ber订阅一个回应消息的Top i c;所述内网中部署有内网物联网管理系统和代理模块,所述代理模块作为内网Subscr i ber接入到Broker集群中,且订阅内网物联网管理系统的Top i c;通过该反向代理系统,公网能够直接访问内网HTTP服务。优点是:采用MQTT协议作为通信协议基础通道,整体系统开销非常小,并且MQTT提供了TLS加密,通信的安全性也得到了保证。
Description
技术领域
本发明涉及内外网物联网管理系统间信息交付、反向代理技术领域,尤其涉及一种基于MQTT协议的反向代理系统。
背景技术
随着信息安全和网络安全的要求越来越高,特别是在学校内使用的物联网管理系统,都是部署校园网络中,只能在校内局域网使用,但是通过公网进行远程管理是刚需。
常见的内网穿透技术,比如SSH、花生壳、VPN等,都可以实现内网系统的服务映射到公网访问的效果,但是这些技术存在一些问题:比如系统资源开销过大、商用的费用过高、甚至因为网络安全原因被禁止使用等。
因此,需要有一个轻量级的技术来实现内网穿透,既能满足安全需求,又能将内网的接口反向代理到公网使用,还能够方便后续扩展。
发明内容
本发明的目的在于提供一种基于MQTT协议的反向代理系统,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种基于MQTT协议的反向代理系统,包括公网和内网;
所述公网中部署有Broker集群和公网物理网系统,所述公网物联网管理系统作为Publisher接入到Broker集群中,同时作为公网Subscriber订阅一个回应消息的Topic;
所述内网中部署有内网物联网管理系统和代理模块,所述代理模块作为内网Subscriber接入到Broker集群中,且订阅内网物联网管理系统的Topic;
通过该反向代理系统,公网能够直接访问内网HTTP服务;访问的具体过程为:
S1、公网物理网系统负责对外提供统一业务,将HTTP请求消息基于MQTT协议通过Publisher发送到目标内网物理网系统的Topic,并且在该HTTP请求消息中指定回应消息的Topic,之后进入等待回应消息模式;
S2、Broker集群接收到Publisher发送来的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
S3、代理模块在接收到Broker集群发送的HTTP请求之后,解析HTTP请求消息内容,并向内网物联网管理系统发起HTTP请求消息;
S4、内网物联网管理系统收到HTTP请求消息后进行处理,并向代理模块返回处理结果;
S5、代理模块接收到处理结果后,作为Publisher的角色向Broker集群发送一个回应消息,该回应消息的目的Topic为公网物理网管理系统发送的HTTP请求消息中携带的目的Topic;
S6、Broker集群接收到Publisher发送来的回应消息后,将回应消息转发到公网Subscriber;
S7、公网物联网管理系统接收到回应消息后,返回数据给前端;进而实现公网直接访问内网HTTP服务。
优选的,采用Topic规则设计Topic,所述Topic规则具体为,将Topic设计为4级分层规则,每一层的定义为节点类型/消息类型/节点ID/消息ID;
节点类型:用于区分该节点是内网物联网管理系统的节点、公网服务节点、设备节点;通过节点类型获知消息节点主体;
消息类型:对于每个节点来说,将该节点接收到的所有消息,消息包括输入消息、输出消息和响应消息;
节点ID:每个接入Broker集群的节点具有唯一的节点ID,通过节点ID进行唯一性识别,进而实现消息的定点发送;
消息ID:表示Topic内承载具体消息的ID,通过消息ID能够明确消息的格式,从而进行业务处理;将消息ID放入Topic中,能够通过解析Topic识别消息函数的处理。
优选的,消息类型中,
输入消息:表示其他节点主动发给该节点的请求消息;所有的节点在接入Broker集群之后,都需要订阅Topic,从而订阅输入消息;
输出消息:表示当前节点主动对外推送的消息;由于当前节点不关注是有其他节点关注这些信息,所以这些消息统一对外推送即可,由其他节点根据业务需求自行订阅输出消息;
响应消息:表示当前节点主动请求其他节点后,其他节点回应的消息;所有响应消息统一发布到Topic中,节点根据当前业务需求明确是否需要订阅响应消息。
优选的,在所述MQTT协议中增加4字节的协议头,该协议头中包含协议头版本号、是否请求消息、消息SequenceID、消息处理错误码;
协议头版本号:表示解析协议头的版本号,为后续调整协议头预留;
是否请求消息:对于请求消息,需要将该bit位设置为1,对于回应消息,设置为0;
消息SequenceID:表示同一个节点对外发送消息的序列号,每次发送消息的时候,自动加1,允许翻转;在收到请求消息并且处理之后,需要将回应消息的SequenceID设置为请求消息的SequenceID值,然后返回数据;请求方根据回应消息的SequenceID明确该回应消息应该响应给哪个同步调用;
消息处理错误码:表示收到请求消息之后进行处理,如果处理中出现特殊异常,需要回应错误消息给对方;
优选的,在加入Topic规则以及协议头之后,公网直接访问内网HTTP服务的具体过程为:
A1、公网AIP服务初始化一个UUID启动,初始化MQTT Client,并且订阅a/i/uuid1/#和a/r/uuid1/#这两个Topic;
A2、代理模块获取内网物联管理系统的UUID,初始化MQTT Client,并且订阅s/i/uuid2/#以及s/r/uuid2/#这两个Topic;
A3、公网API收到API请求后,查询内网物联网管理系统的UUID得到uuid2,调用底层库通过Publisher发送HTTP请求消息给Broker集群;
A4、Broker集群收到Publisher发送的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
A5、代理模块在收到来自Broker集群的HTTP请求消息之后,由底层库统一处理;
A6、代理模块的上层服务通过注册的函数进行处理,识别HTTP请求消息,然后调用内部的Web服务接口;
A7、Web服务接口处理HTTP请求消息,然后将处理结果返回给底层库,由底层库统一回应消息;
A8、Broker集群收到Publisher发送的回应消息之后,将回应消息转到公网Subscriber;
A9、公网API服务收到来自a/r/uuid1/#的回应消息,底层库统一处理Topic并且识别是回应消息后,获取回应消息的SequenceID,查询该SequenceID对应的回应通道,将回应消息转发给对应的通道中;
A10、公网API服务收到回应消息,完成本次同步HTTP调用。
优选的,步骤A3中调用底层库发送HTTP请求消息给Broker集群的具体过程为,
A31、底层库在将HTTP请求消息进行封装,构造发送给目的内网系统的Topic,即s/i/uuid2/msgID;
A32、获取当前最新的SequenceID,并且将SequenceID+1;
A33、构造协议头,将协议头以及HTTP请求消息重新序列化为一个二进制的MQTT消息;
A34、将HTTP请求消息回应的Topic,即a/r/uuid1/msgID2,封装到MQTT消息中;
A35、通过MQTT Client将最终的MQTT消息发送给Broker集群;
A36、底层库阻塞等待a/r/uuid1/#这个Topic的消息。
优选的,步骤A5中由底层库统一处理的具体过程为,
A51、解析协议头以及HTTP请求消息回应的Topic,获取SequenceID以及对应的消息ID、消息内容;
A52、回调注册的消息处理句柄进行处理;
A53、获取处理结果;
A54、将处理结果封装起来,作为Publisher将最终的消息通过MQTT Client发送到HTTP请求消息回应的Topic中。
优选的,在部署代理模块时,通过统一管理的方式进行动态部署,从而实现负载均衡;具体为,
B1、在公网开发一个负载均衡服务,用于管理所有节点接入Broker集群的详细信息;
B2、代理模块启动时,先访问负载均衡服务的HTTP接口,获取本次接入Broker集群的详细信息,包括Broker集群的IP、端口、加密方式;
B3、代理模块在获取到Broker集群的详细信息后,连接Broker集群并上报接入情况。
本发明的有益效果是:1、本发明采用MQTT协议作为通信协议基础通道,整体系统开销非常小,并且MQTT提供了TLS加密,通信的安全性也得到了保证。2、本发明只用额外开发一个代理服务,即可非常方便提供内网反向代理的效果,不用在原有系统做植入,而且可以将已有的老版本系统无缝切换过来,不用做二次开发。3、本发明通过加入代理模块,可以将公网和内网的物联网管理系统作为一个超级系统进行统一管理,公网环境也可以非常方便进行集群和分布式部署。4、采用MQTT协议之后,内网物联网管理系统作为超级系统的一个节点,其节点状态、来自公网的统一管理等数据,可以直接在现有通道中扩展消息即可,不用在额外开发其他协议进行数据同步。5、本发明除了管理内网物联网管理系统以外,还可以直接接管内网中使用MQTT协议的硬件设备。比如内网中有智能硬件设备,但是没有部署内网物联网管理系统的情况,可以将智能硬件设备通过MQTT协议直接接入到公网环境中,实现直接管理的效果。6、本发明可以实现不同的内网物联网管理系统之间互相进行数据通信,为后续扩展业务功能提供了基础支撑。
附图说明
图1是本发明实施例中MQTT协议中Broker、Publisher、Subscriber的关联关系图;
图2是本发明实施例中反向代理系统的结构示意图;
图3是本发明实施例中公网访问内网的HTTP调用时序原理图;
图4是本发明实施例中加入Topic规则和协议头后,公网同步调用内网服务的的请求时序原理图;
图5是本发明实施例中实现负载均衡的动态部署示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
本实施例中,MQTT协议是一种的物联网通信协议,支持百万级别客户端的连接。在通过该协议组成的系统中,将所有的节点定义为三类角色:Broker集群、Publisher、Subscriber。Publisher和Subscriber之间通过Topic进行关联,关联关系参考图1。
Topic:消息主题,支持分级分层和通配符。是Publisher和Subscriber之间消息通信的桥梁。
2、Broker集群:代理者,是整个消息转发的核心模块,负责对接入的Publisher和Subscriber进行身份认证,负责维护Publisher和Subscriber与Topic的对应关系,并且将Publisher发布的消息转发给所有订阅了的对应Topic的Subscriber。
3、Publisher:消息生产者,负责生产消息,然后将消息推送到某一个Topic上。
4、Subscriber:消息消费者,订阅某些Topic,然后接收来自Topic上面的消息。
反向代理是负责将一个系统内部的数据或者接口通过代理的方式对外提供访问,常见的反向代理工具包括开源的Nginx、Apache等。通过反向代理工具主要是代理网络可达的情况,比如使用者和系统在同一个局域网内,或者整个系统在公网环境,所有使用者都是可以直接访问。
本实施例中,提供了一种基于MQTT协议的反向代理系统,通过在公网部署一套集中式的公网物联网管理系统,实现将校园内网物联网管理系统提供的服务反向代理到公网使用。参考图2,反向代理系统包括公网和内网
所述公网中部署有Broker集群和公网物理网系统,所述公网物联网管理系统作为Publisher接入到Broker集群中,同时作为公网Subscriber订阅一个回应消息的Topic;
所述内网中部署有内网物联网管理系统和代理模块,所述代理模块作为内网Subscriber接入到Broker集群中,且订阅内网物联网管理系统的Topic。
参考图2,反向代理系统的部署过程如下:
1、在内网部署内网物联网管理系统,并且不用做任何的修改;
2、在公网中部署Broker集群;部署Broker集群时同时会配置具体的端口号以及TLS认证信息。公网中还部署有API网关服务以及内网Web服务的前端页面。
3、在公网中开发一套公网物联网管理系统,该公网物联网管理系统系统作为Publisher,接入到Broker集群中。同时作为公网Subscriber,订阅一个回应消息的Topic。
4、开发一个代理模块(Proxy)部署到内网环境中;该模块作为内网Subscriber然后接入到Broker集群中,并且订阅当前内网物联网管理系统的Topic。通过修改代理模块的配置文件,能够指定内网Web服务的IP地址以及HTTP端口号,还能够指定Broker集群的IP地址和端口号。
反向代理系统部署完成后即可通过统一公网Web服务地址以及用户账号信息,直接访问到内网物联网管理系统。
本实施例中,参考图3,通过该反向代理系统,公网能够直接访问内网HTTP服务;访问的具体过程为:
S1、公网物理网系统负责对外提供统一业务,将HTTP请求消息基于MQTT协议通过Publisher发送到目标内网物理网系统的Topic,并且在该HTTP请求消息中指定回应消息的Topic,之后进入等待回应消息模式;
S2、Broker集群接收到Publisher发送来的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
S3、代理模块在接收到Broker集群发送的HTTP请求之后,解析HTTP请求消息内容,并向内网物联网管理系统发起HTTP请求消息;
S4、内网物联网管理系统收到HTTP请求消息后进行处理,并向代理模块返回处理结果;
S5、代理模块接收到处理结果后,作为Publisher的角色向Broker集群发送一个回应消息,该回应消息的目的Topic为公网物理网管理系统发送的HTTP请求消息中携带的目的Topic;
S6、Broker集群接收到Publisher发送来的回应消息后,将回应消息转发到公网Subscriber;
S7、公网物联网管理系统接收到回应消息后,返回数据给前端;进而实现公网直接访问内网HTTP服务。
本实施例中,根据上述反向代理系统可以实现通过MQTT协议进行反向代理,但是由于MQTT协议本身是一个异步消息通知协议,而HTTP协议是同步协议,所以在真实使用场景中还需要重点解决以下几个问题:
1、一个API服务在一瞬间会接收到多个HTTP请求,会同时Publish多个MQTT消息,也会同时收到多个MQTT消息,如何识别消息之间的关联性,从而实现同步调用。
2、在整个系统中,是由多个API服务组成的集群,那么如何保证每一个API服务都只接收到自己需要的消息。
3、在MQTT协议上,不仅有HTTP的同步调用请求,也有单向的通知消息,如何进行区别处理。
通过消息队列技术来实现同步调用,常见的做法是:发送一个请求消息的时候,动态订阅一个Topic,收到该Topic的消息之后,在取消订阅该Topic。通过Topic的动态订阅和取消,来实现消息的映射关系。但是,这种动态订阅Topic的方式存在一个非常大的问题:整个系统中的Topic在频繁的变化,导致整个系统的开销过大。
针对上述问题,本发明通过设计Topic规则和协议头,实现可以不用动态订阅Topic,就可以实现消息的映射。其中Topic规则用于解决节点之间的消息映射问题。协议头添加到MQTT协议前面,用于解决消息间的映射问题。两者配套用于解决同步调用和后续扩展问题。具体的:
一、Topic规则
采用Topic规则设计Topic,所述Topic规则具体为,将Topic设计为4级分层规则,每一层的定义为节点类型/消息类型/节点ID/消息ID;
1、节点类型:用于区分该节点是内网物联网管理系统的节点、公网服务节点、设备节点;通过节点类型获知消息节点主体。为了优化网络开销,将内网系统节点定义为”school”,简写“s”;将外网服务节点定义为“app”,简称“a”,将设备节点定义为“device”,简称d。
2、消息类型:对于每个节点来说,将该节点接收到的所有消息,消息抽象为三类,分别是输入消息、输出消息和响应消息。
2.1、输入消息:表示其他节点主动发给该节点的请求消息;所有的节点在接入Broker集群之后,都需要订阅Topic,从而订阅输入消息。将输入消息定义为“input”,简称“i”;
2.2、输出消息:表示当前节点主动对外推送的消息;由于当前节点不关注是有其他节点关注这些信息,所以这些消息统一对外推送即可,由其他节点根据业务需求自行订阅输出消息。将输出消息定义为“output”,简称“o”。
2.3、响应消息:表示当前节点主动请求其他节点后,其他节点回应的消息;所有响应消息统一发布到Topic中,便于统一处理,并且可以减少不必要的订阅和取消订阅操作,可以优化系统的整体性能。节点根据当前业务需求明确是否需要订阅响应消息。将响应消息定义为“response”,简称“r”。
3、节点ID:每个接入Broker集群的节点具有唯一的节点ID,通过节点ID进行唯一性识别,进而实现消息的定点发送。
4、消息ID:表示Topic内承载具体消息的ID,通过消息ID能够明确消息的格式,从而进行业务处理;将消息ID放入Topic中,能够通过解析Topic识别消息函数的处理。
二、协议头
在所述MQTT协议中额外增加4字节的协议头,该协议头中包含协议头版本号、是否请求消息、消息SequenceID、消息处理错误码;
1、协议头版本号:表示解析协议头的版本号,为后续调整协议头预留;大小为6bit;
2、是否请求消息:对于请求消息,需要将该bit位设置为1,对于回应消息,设置为0;大小为1bit;
3、消息SequenceID:表示同一个节点对外发送消息的序列号,每次发送消息的时候,自动加1,允许翻转;在收到请求消息并且处理之后,需要将回应消息的SequenceID设置为请求消息的SequenceID值,然后返回数据;请求方根据回应消息的SequenceID明确该回应消息应该响应给哪个同步调用;大小为2bit;
4、消息处理错误码:表示收到请求消息之后进行处理,如果处理中出现特殊异常,需要回应错误消息给对方。大小为1bit。
协议头的格式如下:
(1)v:version,//6bit,版本号,第一个字节的前6个bit位[bit0-bit5]特别说明。
(2)req:0,1,//1bit,是否请求消息。0表示回应消息,1表示请求消息。第一个字节的bit6;
(3)resv:保留,//1bit,保留未使用。
(4)seqID:id,//2字节,消息的SequenceID号。
(5)rescode:回应消息错误码,//1字节。
(6)body:{},//消息体,表示具体的消息内容。
本实施例中,参见图4,在加入Topic规则以及协议头之后,公网直接访问内网HTTP服务的具体过程为:
A1、公网AIP服务初始化一个UUID启动,初始化MQTT Client,并且订阅a/i/uuid1/#和a/r/uuid1/#这两个Topic;
A2、代理模块获取内网物联管理系统的UUID,初始化MQTT Client,并且订阅s/i/uuid2/#以及s/r/uuid2/#这两个Topic;
A3、公网API收到API请求后,查询内网物联网管理系统的UUID得到uuid2,调用底层库通过Publisher发送HTTP请求消息给Broker集群;
步骤A3中调用底层库发送HTTP请求消息给Broker集群的具体过程为,
3.1、底层库在将HTTP请求消息进行封装,构造发送给目的内网系统的Topic,即s/i/uuid2/msgID;
3.2、获取当前最新的SequenceID,并且将SequenceID+1;
3.3、构造协议头,将协议头以及HTTP请求消息重新序列化为一个二进制的MQTT消息;
3.4、将HTTP请求消息回应的Topic,即a/r/uuid1/msgID2,封装到MQTT消息中;
3.5、通过MQTT Client将最终的MQTT消息发送给Broker集群;
3.6、底层库阻塞等待a/r/uuid1/#这个Topic的消息。
A4、Broker集群收到Publisher发送的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
A5、代理模块在收到来自Broker集群的HTTP请求消息之后,由底层库统一处理;
步骤A5中由底层库统一处理的具体过程为,
5.1、解析协议头以及HTTP请求消息回应的Topic,获取SequenceID以及对应的消息ID、消息内容;
5.2、回调注册的消息处理句柄进行处理;
5.3、获取处理结果;
5.4、将处理结果封装起来,作为Publisher将最终的消息通过MQTT Client发送到HTTP请求消息回应的Topic中。
A6、代理模块的上层服务通过注册的函数进行处理,识别HTTP请求消息,然后调用内部的Web服务接口;
A7、Web服务接口处理HTTP请求消息,然后将处理结果返回给底层库,由底层库统一回应消息;
A8、Broker集群收到Publisher发送的回应消息之后,将回应消息转到公网Subscriber;
A9、公网API服务收到来自a/r/uuid1/#的回应消息,底层库统一处理Topic并且识别是回应消息后,获取回应消息的SequenceID,查询该SequenceID对应的回应通道,将回应消息转发给对应的通道中;
A10、公网API服务收到回应消息,完成本次同步HTTP调用,从而实现了从公网直接调用内网HTTP接口的效果。
本实施例中,本发明系统主要基于MQTT协议重新创建了一个内网节点和公网节点通信的路,后续需要扩展新的消息时,只需要扩展msgID以及对应的消息体即可。
本实施例中,参考图5,在部署代理模块时,通过统一管理的方式进行动态部署,从而实现负载均衡;具体为,
1、在公网开发一个负载均衡服务,用于管理所有节点接入Broker集群的详细信息;
2、代理模块启动时,先访问负载均衡服务的HTTP接口,获取本次接入Broker集群的详细信息,包括Broker集群的IP、端口、加密方式;
3、代理模块在获取到Broker集群的详细信息后,连接Broker集群并上报接入情况。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
本发明提供了一种基于MQTT协议的反向代理系统,本发明采用MQTT协议作为通信协议基础通道,整体系统开销非常小,并且MQTT提供了TLS加密,通信的安全性也得到了保证。本发明只用额外开发一个代理服务,即可非常方便提供内网反向代理的效果,不用在原有系统做植入,而且可以将已有的老版本系统无缝切换过来,不用做二次开发。本发明通过加入代理模块,可以将公网和内网的物联网管理系统作为一个超级系统进行统一管理,公网环境也可以非常方便进行集群和分布式部署。采用MQTT协议之后,内网物联网管理系统作为超级系统的一个节点,其节点状态、来自公网的统一管理等数据,可以直接在现有通道中扩展消息即可,不用在额外开发其他协议进行数据同步。本发明除了管理内网物联网管理系统以外,还可以直接接管内网中使用MQTT协议的硬件设备。比如内网中有智能硬件设备,但是没有部署内网物联网管理系统的情况,可以将智能硬件设备通过MQTT协议直接接入到公网环境中,实现直接管理的效果。本发明可以实现不同的内网物联网管理系统之间互相进行数据通信,为后续扩展业务功能提供了基础支撑。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (8)
1.一种基于MQTT协议的反向代理系统,其特征在于:包括公网和内网;
所述公网中部署有Broker集群和公网物理网系统,所述公网物联网管理系统作为Publisher接入到Broker集群中,同时作为公网Subscriber订阅一个回应消息的Topic;
所述内网中部署有内网物联网管理系统和代理模块,所述代理模块作为内网Subscriber接入到Broker集群中,且订阅内网物联网管理系统的Topic;
通过该反向代理系统,公网能够直接访问内网HTTP服务;访问的具体过程为:
S1、公网物理网系统负责对外提供统一业务,将HTTP请求消息基于MQTT协议通过Publisher发送到目标内网物理网系统的Topic,并且在该HTTP请求消息中指定回应消息的Topic,之后进入等待回应消息模式;
S2、Broker集群接收到Publisher发送来的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
S3、代理模块在接收到Broker集群发送的HTTP请求之后,解析HTTP请求消息内容,并向内网物联网管理系统发起HTTP请求消息;
S4、内网物联网管理系统收到HTTP请求消息后进行处理,并向代理模块返回处理结果;
S5、代理模块接收到处理结果后,作为Publisher的角色向Broker集群发送一个回应消息,该回应消息的目的Topic为公网物理网管理系统发送的HTTP请求消息中携带的目的Topic;
S6、Broker集群接收到Publisher发送来的回应消息后,将回应消息转发到公网Subscriber;
S7、公网物联网管理系统接收到回应消息后,返回数据给前端;进而实现公网直接访问内网HTTP服务。
2.根据权利要求1所述的基于MQTT协议的反向代理系统,其特征在于:采用Topic规则设计Topic,所述Topic规则具体为,将Topic设计为4级分层规则,每一层的定义为节点类型/消息类型/节点ID/消息ID;
节点类型:用于区分该节点是内网物联网管理系统的节点、公网服务节点、设备节点;通过节点类型获知消息节点主体;
消息类型:对于每个节点来说,将该节点接收到的所有消息,消息包括输入消息、输出消息和响应消息;
节点ID:每个接入Broker集群的节点具有唯一的节点ID,通过节点ID进行唯一性识别,进而实现消息的定点发送;
消息ID:表示Topic内承载具体消息的ID,通过消息ID能够明确消息的格式,从而进行业务处理;将消息ID放入Topic中,能够通过解析Topic识别消息函数的处理。
3.根据权利要求2所述的基于MQTT协议的反向代理系统,其特征在于:消息类型中,
输入消息:表示其他节点主动发给该节点的请求消息;所有的节点在接入Broker集群之后,都需要订阅Topic,从而订阅输入消息;
输出消息:表示当前节点主动对外推送的消息;由于当前节点不关注是有其他节点关注这些信息,所以这些消息统一对外推送即可,由其他节点根据业务需求自行订阅输出消息;
响应消息:表示当前节点主动请求其他节点后,其他节点回应的消息;所有响应消息统一发布到Topic中,节点根据当前业务需求明确是否需要订阅响应消息。
4.根据权利要求3所述的基于MQTT协议的反向代理系统,其特征在于:在所述MQTT协议中增加4字节的协议头,该协议头中包含协议头版本号、是否请求消息、消息SequenceID、消息处理错误码;
协议头版本号:表示解析协议头的版本号,为后续调整协议头预留;
是否请求消息:对于请求消息,需要将该bit位设置为1,对于回应消息,设置为0;
消息SequenceID:表示同一个节点对外发送消息的序列号,每次发送消息的时候,自动加1,允许翻转;在收到请求消息并且处理之后,需要将回应消息的SequenceID设置为请求消息的SequenceID值,然后返回数据;请求方根据回应消息的SequenceID明确该回应消息应该响应给哪个同步调用;
消息处理错误码:表示收到请求消息之后进行处理,如果处理中出现特殊异常,需要回应错误消息给对方。
5.根据权利要求4所述的基于MQTT协议的反向代理系统,其特征在于:在加入Topic规则以及协议头之后,公网直接访问内网HTTP服务的具体过程为:
A1、公网AIP服务初始化一个UUID启动,初始化MQTT Client,并且订阅a/i/uuid1/#和a/r/uuid1/#这两个Topic;
A2、代理模块获取内网物联管理系统的UUID,初始化MQTT Client,并且订阅s/i/uuid2/#以及s/r/uuid2/#这两个Topic;
A3、公网API收到API请求后,查询内网物联网管理系统的UUID得到uuid2,调用底层库通过Publisher发送HTTP请求消息给Broker集群;
A4、Broker集群收到Publisher发送的HTTP请求消息之后,将HTTP请求消息发送给代理模块;
A5、代理模块在收到来自Broker集群的HTTP请求消息之后,由底层库统一处理;
A6、代理模块的上层服务通过注册的函数进行处理,识别HTTP请求消息,然后调用内部的Web服务接口;
A7、Web服务接口处理HTTP请求消息,然后将处理结果返回给底层库,由底层库统一回应消息;
A8、Broker集群收到Publisher发送的回应消息之后,将回应消息转到公网Subscriber;
A9、公网API服务收到来自a/r/uuid1/#的回应消息,底层库统一处理Topic并且识别是回应消息后,获取回应消息的SequenceID,查询该SequenceID对应的回应通道,将回应消息转发给对应的通道中;
A10、公网API服务收到回应消息,完成本次同步HTTP调用。
6.根据权利要求5所述的基于MQTT协议的反向代理系统,其特征在于:步骤A3中调用底层库发送HTTP请求消息给Broker集群的具体过程为,
A31、底层库在将HTTP请求消息进行封装,构造发送给目的内网系统的Topic,即s/i/uuid2/msgID;
A32、获取当前最新的SequenceID,并且将SequenceID+1;
A33、构造协议头,将协议头以及HTTP请求消息重新序列化为一个二进制的MQTT消息;
A34、将HTTP请求消息回应的Topic,即a/r/uuid1/msgID2,封装到MQTT消息中;
A35、通过MQTT Client将最终的MQTT消息发送给Broker集群;
A36、底层库阻塞等待a/r/uuid1/#这个Topic的消息。
7.根据权利要求5所述的基于MQTT协议的反向代理系统,其特征在于:步骤A5中由底层库统一处理的具体过程为,
A51、解析协议头以及HTTP请求消息回应的Topic,获取SequenceID以及对应的消息ID、消息内容;
A52、回调注册的消息处理句柄进行处理;
A53、获取处理结果;
A54、将处理结果封装起来,作为Publisher将最终的消息通过MQTT Client发送到HTTP请求消息回应的Topic中。
8.根据权利要求1所述的基于MQTT协议的反向代理系统,其特征在于:在部署代理模块时,通过统一管理的方式进行动态部署,从而实现负载均衡;具体为,
B1、在公网开发一个负载均衡服务,用于管理所有节点接入Broker集群的详细信息;
B2、代理模块启动时,先访问负载均衡服务的HTTP接口,获取本次接入Broker集群的详细信息,包括Broker集群的IP、端口、加密方式;
B3、代理模块在获取到Broker集群的详细信息后,连接Broker集群并上报接入情况。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210555012.5A CN114978683B (zh) | 2022-05-20 | 2022-05-20 | 一种基于mqtt协议的反向代理系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210555012.5A CN114978683B (zh) | 2022-05-20 | 2022-05-20 | 一种基于mqtt协议的反向代理系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114978683A true CN114978683A (zh) | 2022-08-30 |
CN114978683B CN114978683B (zh) | 2023-03-31 |
Family
ID=82985118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210555012.5A Active CN114978683B (zh) | 2022-05-20 | 2022-05-20 | 一种基于mqtt协议的反向代理系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114978683B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117560415A (zh) * | 2024-01-11 | 2024-02-13 | 德阳城市智慧之心信息技术有限公司 | 智慧社区微服务架构mqtt异步和同步通信方法和系统 |
CN117614751A (zh) * | 2024-01-24 | 2024-02-27 | 上海银基信息安全技术股份有限公司 | 内网访问方法及系统 |
WO2024192131A1 (en) * | 2023-03-13 | 2024-09-19 | Microchip Technology Incorporated | Connectivity framework using standard messaging protocol at the transport layer |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8626716B1 (en) * | 2004-04-08 | 2014-01-07 | Sprint Communications Company L.P. | Service broker enhancements |
WO2016192537A1 (zh) * | 2015-06-05 | 2016-12-08 | 李皞白 | 使用物联网建立产品真伪辨识数据模块的系统 |
CN106656632A (zh) * | 2017-02-03 | 2017-05-10 | 上海中信信息发展股份有限公司 | 融合以太网和物联网协议的机房监控系统及信息处理、控制方法 |
US20180167476A1 (en) * | 2016-12-12 | 2018-06-14 | Sap Se | Meta broker for publish-subscribe-based messaging |
CN109587228A (zh) * | 2018-11-23 | 2019-04-05 | 济南浪潮高新科技投资发展有限公司 | 一种公有协议物联网平台及设备接入方法 |
US20190289026A1 (en) * | 2018-03-19 | 2019-09-19 | Bank Of America Corporation | SMART INTERNET OF THINGS ("IoT") WEB OF TRUST |
US20190306267A1 (en) * | 2018-03-27 | 2019-10-03 | Bank Of America Corporation | REVERSE PROXY SERVER FOR AN INTERNET OF THINGS ("IoT") NETWORK |
CN111212034A (zh) * | 2019-12-18 | 2020-05-29 | 珠海伟诚科技股份有限公司 | 基于mqtt的内外网数据通信系统及其方法 |
CN113612825A (zh) * | 2021-07-26 | 2021-11-05 | 建信金融科技有限责任公司 | 物联网消息中间件服务器集群扩展方法及系统 |
CN113672405A (zh) * | 2021-08-23 | 2021-11-19 | 上海哔哩哔哩科技有限公司 | 数据交互系统和基于数据交互系统的页面展示方法 |
CN114401284A (zh) * | 2021-12-02 | 2022-04-26 | 南京工业大学 | 固定污染源治理工况实时数据采集与传输系统及方法 |
-
2022
- 2022-05-20 CN CN202210555012.5A patent/CN114978683B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8626716B1 (en) * | 2004-04-08 | 2014-01-07 | Sprint Communications Company L.P. | Service broker enhancements |
WO2016192537A1 (zh) * | 2015-06-05 | 2016-12-08 | 李皞白 | 使用物联网建立产品真伪辨识数据模块的系统 |
US20180167476A1 (en) * | 2016-12-12 | 2018-06-14 | Sap Se | Meta broker for publish-subscribe-based messaging |
CN106656632A (zh) * | 2017-02-03 | 2017-05-10 | 上海中信信息发展股份有限公司 | 融合以太网和物联网协议的机房监控系统及信息处理、控制方法 |
US20190289026A1 (en) * | 2018-03-19 | 2019-09-19 | Bank Of America Corporation | SMART INTERNET OF THINGS ("IoT") WEB OF TRUST |
US20190306267A1 (en) * | 2018-03-27 | 2019-10-03 | Bank Of America Corporation | REVERSE PROXY SERVER FOR AN INTERNET OF THINGS ("IoT") NETWORK |
CN109587228A (zh) * | 2018-11-23 | 2019-04-05 | 济南浪潮高新科技投资发展有限公司 | 一种公有协议物联网平台及设备接入方法 |
CN111212034A (zh) * | 2019-12-18 | 2020-05-29 | 珠海伟诚科技股份有限公司 | 基于mqtt的内外网数据通信系统及其方法 |
CN113612825A (zh) * | 2021-07-26 | 2021-11-05 | 建信金融科技有限责任公司 | 物联网消息中间件服务器集群扩展方法及系统 |
CN113672405A (zh) * | 2021-08-23 | 2021-11-19 | 上海哔哩哔哩科技有限公司 | 数据交互系统和基于数据交互系统的页面展示方法 |
CN114401284A (zh) * | 2021-12-02 | 2022-04-26 | 南京工业大学 | 固定污染源治理工况实时数据采集与传输系统及方法 |
Non-Patent Citations (2)
Title |
---|
BRUNA SALLES MOREIRA等: "An Interoperable Integration Model for Bluetooth Devices in the Internet of Things" * |
胡喜明等: "基于响应式的服务推送框架设计" * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024192131A1 (en) * | 2023-03-13 | 2024-09-19 | Microchip Technology Incorporated | Connectivity framework using standard messaging protocol at the transport layer |
CN117560415A (zh) * | 2024-01-11 | 2024-02-13 | 德阳城市智慧之心信息技术有限公司 | 智慧社区微服务架构mqtt异步和同步通信方法和系统 |
CN117560415B (zh) * | 2024-01-11 | 2024-03-22 | 德阳城市智慧之心信息技术有限公司 | 智慧社区微服务架构mqtt异步和同步通信方法和系统 |
CN117614751A (zh) * | 2024-01-24 | 2024-02-27 | 上海银基信息安全技术股份有限公司 | 内网访问方法及系统 |
CN117614751B (zh) * | 2024-01-24 | 2024-04-02 | 上海银基信息安全技术股份有限公司 | 内网访问方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114978683B (zh) | 2023-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114978683B (zh) | 一种基于mqtt协议的反向代理系统 | |
WO2020147466A1 (zh) | 调用服务器的方法和代理服务器 | |
US6708217B1 (en) | Method and system for receiving and demultiplexing multi-modal document content | |
TWI397277B (zh) | 統一訊息服務之系統及方法 | |
US8863111B2 (en) | System and method for providing a production upgrade of components within a multiprotocol gateway | |
US9143540B2 (en) | System and method for providing service correlation in a service access gateway environment | |
US8069209B1 (en) | Method for activating and deactivating client-side services from a distant server | |
US20030195964A1 (en) | Managing multicast sessions | |
KR20010062065A (ko) | 순간 메시징을 위한 프로토콜 | |
JP2013128307A (ja) | パケットフローに基づくセッションサービスの適用 | |
US9135094B2 (en) | Adding configurable messaging functionality to an infrastructure | |
CN101729491B (zh) | 一种增强基于脚本业务的应用可靠性的方法、装置和系统 | |
JPH1093629A (ja) | インターネットに通信を構築するためのインテリジェント処理 | |
US20090196308A1 (en) | Method and system for coordinating services provided by different service providers | |
US7181490B1 (en) | Method and apparatus for mapping network events to names of network devices | |
US6891860B2 (en) | Method and apparatus for establishing multiple bandwidth-limited connections for a communication device | |
JP2004064755A (ja) | 呼確立シグナリングによりデータ要求を行うための方法およびコンピュータプログラムプロダクト | |
CN113747373B (zh) | 消息处理系统、装置和方法 | |
US11757783B2 (en) | ENUM/DNS packet priority control system and ENUM/DNS packet priority control method | |
EP3682596A1 (en) | Serverless core network architecture | |
CN110474781B (zh) | 一种组播数据转发的方法及装置 | |
KR100430910B1 (ko) | 지정된 응용 모듈의 기능을 차용하는 그룹-독립형 메시지전송 방법 및 시스템 | |
RU2447596C2 (ru) | КЛИЕНТСКАЯ VoIP ИНФОРМАЦИЯ | |
JP2002009846A (ja) | マルチメディアプロキシサーバを用いた通信システム | |
Zaplata et al. | Realizing mobile web services for dynamic applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |