CN110336736B - 基于mqtt服务器集群实现共享订阅的方法 - Google Patents

基于mqtt服务器集群实现共享订阅的方法 Download PDF

Info

Publication number
CN110336736B
CN110336736B CN201910446488.3A CN201910446488A CN110336736B CN 110336736 B CN110336736 B CN 110336736B CN 201910446488 A CN201910446488 A CN 201910446488A CN 110336736 B CN110336736 B CN 110336736B
Authority
CN
China
Prior art keywords
subscription
mqtt
message
client
shared
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.)
Active
Application number
CN201910446488.3A
Other languages
English (en)
Other versions
CN110336736A (zh
Inventor
余龙海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201910446488.3A priority Critical patent/CN110336736B/zh
Publication of CN110336736A publication Critical patent/CN110336736A/zh
Application granted granted Critical
Publication of CN110336736B publication Critical patent/CN110336736B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种基于MQTT服务器集群实现共享订阅的方法,包括以下步骤:设置共享订阅主题:在标准的主题定义前设置共享订阅前缀,所述共享订阅前缀包括队列共享订阅前缀和分组共享订阅前缀;搭建基于Erlang mnesia集群技术的MQTT服务器集群,该MQTT服务器集群包括基于事件驱动架构、mnesia分布式数据库、ets路由表和map分组映射的智能路由系统;基于分层架构设计对MQTT服务器集群的结构进行优化;进入共享订阅处理流程;进入消息发布流程;本发明通过共享订阅,使得同一个消息不会发送到多个订阅者,从而实现订阅端的多个节点之间的负载均衡。

Description

基于MQTT服务器集群实现共享订阅的方法
技术领域
本发明涉及MQTT传输协议技术领域,特别是一种基于MQTT服务器集群实现共享订阅的方法。
背景技术
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是由IBM公司开发的轻量级的即时通信协议。与HTTP协议不同的是,MQTT采用的是发布/订阅的模式,而不是传统的请求/响应模式,这种更为轻量级的模式使得MQTT更加适用于低功耗和网络带宽有限的物联网设备。同时,MQTT还具有精简、支持连续的回话控制、提供传输的不同服务质量、可定制性强等特点,在物联网正当火热的今天,其价值得以充分体现。MQTT作为物联网的重要传输协议,支持几乎所有的平台。
发布和订阅模式中,发布者向MQTT服务器发送一条带有特定主题的消息,订阅者通过向服务器订阅这一主题,从而接收从服务器转发来的消息。
MQTT消息服务器作为发布/订阅作为消息的代理者,完成了整个消息收发流程的空间解耦,时间解耦和同步解耦。MQTT服务器通过过滤消息,使某些客户端能收到特有的消息。这种发布/订阅模式提供了广大的可扩展性,这是因为基于Erlang开发的消息服务器提供了高度并行化和分布透明化的能力,很容易在集群中动态添加节点来增加服务器的承载量。但是扩展到百万级客户端连接绝对是一个挑战。因为在如此量级情况下,MQTT集群节点间处理消息路由是十分繁琐而庞大的;特别在数据采集/集中处理应用中,数据的生产者远多于数据的消费者,且消息只需要被任意客户端处理一次,仍然会在节点间传输大量的重复、无用的数据的情况下,急需一种能够减少节点间数据传输的实现方法。
发明内容
为解决现有技术中存在的问题,本发明的目的是提供一种基于MQTT服务器集群实现共享订阅的方法,本发明通过设置两种订阅主题前缀以及Erlang otp分布式集群使得同一个主题的客户端轮流的收到同一主题消息,同一个消息不会发送到多个订阅客户端,从而实现订阅端的多个节点之间的负载均衡。
为实现上述目的,本发明采用的技术方案是:一种基于MQTT服务器集群实现共享订阅的方法,包括以下步骤:
A、设置共享订阅主题:在标准的主题定义前设置共享订阅前缀,所述共享订阅前缀包括队列共享订阅前缀和分组共享订阅前缀;
B、搭建基于Erlang mnesia集群技术的MQTT服务器集群,该MQTT服务器集群包括基于事件驱动架构、mnesia分布式数据库、ets路由表和map分组映射的智能路由系统;
C、基于分层架构设计对MQTT服务器集群的结构进行优化;
D、进入共享订阅处理流程,具体包括:
D1、订阅客户端通过负载均衡LB同MQTT服务器集群节点建立连接;
D2、订阅客户端订阅MQTT的共享订阅前缀;
D3、MQTT服务器节点客户端后台收发消息进程mqtt_client收到订阅客户端的订阅报文;
D4、对报文信息进行解析,并判断MQTT服务器版本,以及各参数是否完整;
D5、调用MQTT服务器的ACL模块,进行订阅权限验证,如果权限允许才进行相应的后续MQTT订阅流程;
D6、解析MQTT的共享订阅主题,并通过map分组映射的智能路由系统使用相应的分组map和队列map进行存储;
D7、订阅模块收到相应的消息后,判断该订阅的类型,如果该订阅是共享订阅,则调用订阅模块中的处理函数,判断共享订阅是否完整和重复,并保存到mnesia分布式数据库中;如果该订阅是本地订阅,则调用路由模块,存储本地订阅路由和订阅信息到相应的ets路由表中;
E、进入消息发布流程,具体包括:
E1、发布客户端通过负载均衡LB同MQTT服务器集群节点建立连接;
E2、发布客户端发布没有共享订阅前缀的主题消息;
E3、MQTT服务器启动单独的进程进行报文的接收;
E4、解析报文,并判断报文的完整性,以及报文类型是否符合发送协议规范;
E5、调用MQTT服务器的ACL模块,并判断发送报文处理权限;
E6、如果报文是Qos0,在发布客户端会话进程中调用pub_sub模块,所述pub_sub模块判断是否需要遍历所有的集群节点查找消息路由,如果本节点有订阅,则不需要访问其他节点,调用route模块访问mqtt_route内存表,获取路由信息和mnesia分布式数据库中主题树信息,分析出最优的路由信息,否则通过在mnesia分布式数据库中遍历节点信息,获取该节点和主题树信息,判断是否该节点有订阅者,如果该节点有订阅者,则选择一订阅客户端会话进程进行通信。
作为一种优选的实施方式,所述步骤C中,将MQTT服务器集群的结构具体分成:
连接层,用于TCP连接及MQTT协议的编解码;
会话层,用于MQTT协议发布订阅消息交互流程;
路由层,用于节点内路由派发MQTT消息;
分布层,用于分布节点间路由MQTT消息。
作为另一种优选的实施方式,在所述步骤D6后还包括以下步骤:
调用该客户端会话进程判断订阅是否是重复订阅,如果是重复订阅则返回订阅响应,告知订阅完成;如果不是重复订阅,则通过进程间消息队列方式传输相应的维护信息和订阅信息到处理进程,该进程存储订阅信息到内存表中。
作为另一种优选的实施方式,所述步骤E还包括:
E7、如果报文是Qos1,则还需要添加PUBACK消息处理流程。
作为另一种优选的实施方式,所述步骤E还包括:
E8、如果报文是Qos2,则还需要在客户端会话中启动新进程,并定时判断PUBREL信息,并进行处理。
本发明的有益效果是:
本发明基于Erlang/OTP语言平台的抢占式轻量进程调度,能够轻松实现集群的扩展,并支持百万级的数据路由信息。进程的创建和切换更加灵活,所使用资源更少,减少了节点间数据传输量。对于数据采集/集中处理类应用非常有用,这种应用场景下,数据的生产者远多于数据的消费者,且同一条数据只需要被任意消费者处理一次。通过共享订阅,使得同一个消息不会发送到多个订阅者,从而实现订阅端的多个节点之间的负载均衡。
附图说明
图1为本发明实施例的流程框图;
图2为本发明实施例共享订阅主题为队列共享订阅前缀的示意图;
图3为本发明实施例中共享订阅主题为分组共享订阅前缀的示意图;
图4为本发明实施例中MQTT消息服务器处理客户端共享订阅的流程框图;
图5为本发明实施例中MQTT消息服务器处理客户端发布消息的流程框图。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例1:
如图1所示,一种基于MQTT服务器集群实现共享订阅的方法,在MQTT消息服务器集群中设计了基于事件驱动架构、mnesia分布式数据库、ets路由表和map分组映射的智能路由系统,并在此基础上添加了共享订阅处理流程。
如图2和图3所示,设置了两种订阅主题前缀队列共享订阅前缀$queue和分组共享订阅前缀$share/<group>。
队列共享订阅是指以$queue/开头的topic例如$queue/topic1,如果有多个客户端同时订阅了,MQTT消息服务器集群会把发送到topic1的消息以负载均衡的方式派发给一个客户端。
分组共享订阅是一个更加灵活的方式,实现方式为所有以$share/<group>/开头的topic会以group来分组进行消息的负载均衡派发。例如有4个客户端依次订阅了$share/group1/topic1,$share/group1/topic1,$share/group2/topic1和$share/group1/topic1。所有发送到topic1的消息会被同时派发到分组group1和group2,但是两个分组中的每次都只会有一个客户端收到消息。
前缀$queue和$share/<group>/只适用于订阅时,发布消息时不需要。
基于Erlang开发MQTT服务器集群,由于Erlang语言天生的分布式开发特性,使得MQTT集群很容易搭建,也容易扩展。通过mnesia表能很容易同步集群数据,表可以建立在其中某个节点所在的数据库目录,然后拷贝到其他节点数据库目录,mnesia会同步数据库,在启动时执行mnesia:wait_for_tables实现数据库数据同步。mnesia能够存储路由表,主题树等多种需要在集群共享的数据,结合ets路由表表分析最佳路由。
在整个MQTT服务器的设计构架上,分成了连接层(负责TCP连接处理、MQTT协议编解码);会话层(处理MQTT协议发布订阅消息交互流程);路由层(节点内路由派发MQTT消息)和分布层(分布节点间路由MQTT消息),基于分层设计,才能更好的实现MQTT共享订阅功能。
图4为MQTT消息服务器处理客户端共享订阅的流程框图,订阅流程如下:
订阅客户端通过负载均衡LB同MQTT服务器集群节点建立连接。
2、订阅客户端订阅$queue/和$share/<group>/主题前缀。
3、MQTT服务器节点客户端后台收发消息进程mqtt_client收到客户端订阅报文。
4、对报文信息进行解析,并判断MQTT版本,以及各参数是否完整。
5、调用MQTT服务器ACL模块,进行订阅权限验证,如果权限允许才进行相应的后续MQTT订阅流程。
6、解析MQTT共享订阅主题,并使用相应的group map和queue map进行存储。
7、调用该客户端会话进程判断订阅是否是重复订阅。如果是重复订阅返回订阅响应,告知订阅完成。
8、如果不是重复订阅,通过进程间消息队列方式传输相应的维护信息和订阅信息到处理进程,该进程存储订阅信息到内存表中。
9、订阅模块收到相应的消息后,判断该订阅的类型。如果类型是共享订阅,调用订阅模块中的处理函数,该函数判断共享订阅是否完整和重复,并保存到mnesia分布式数据库中。
10、如果是本地订阅则调用路由模块,存储本地订阅路由和订阅信息到相应的ets路由表中。
图5为MQTT消息服务器处理客户端发布消息的流程框图,发布流程如下:
1、发布客户端通过负载均衡LB同MQTT服务器集群节点建立连接。
2、发布客户端发布没有$queue/和$share/<group>/前缀的主题消息。
3、MQTT服务器启动单独的进程进行报文的接收。
4、解析报文,并判断报文的完整性,以及报文类型是否符合发送协议规范。
5、调用ACL模块,并判发送报文处理权限。
6、如果报文是Qos0,在客户端会话进程中调用pub_sub模块。该模块判断是否需要遍历所有的集群节点查找消息路由。
7、如果本节点有订阅,则不需要访问其他节点,调用route模块访问mqtt_route内存表,获取路由信息和mnesia分布式数据库中主题树信息,分析出最优的路由信息。
8、否则通过在mnesia分布式数据库中遍历节点信息,获取该节点和主题树信息,判断是否该节点有订阅者,如果该节点有订阅者,则选择一订阅客户端会话进程进行通信。
9、如果是Qos1,在Qos0的处理流程基础上添加PUBACK的消息处理。
10、如果是Qos2,在Qos1的处理流程基础上,客户端会话中启动新进程,并定时判断PUBREL信息,并进行处理。
实施例2:
首先通过mnesia分布式数据库实现MQTT服务器集群的建立,同步节点间数据。
1、启动一个节点'mqtt@hostname1',在该节点上执行mnesia:create_schema([node()]).mnesia:start().(必须启动数据,否则其他节点无法加入集群)创建数据库。
2、启动第二个节点'mqtt@hostname2',ping通'mqtt@hostname1',并执行mnesia:start().(必须启动mnesia否则无法执行下面步骤)。
3、在第二个节点'mqtt@hostname2'上执行mnesia:change_config(extra_db_node,['mqtt@hostname'])。
4、在第二个节点'mqtt@hostname2'上执行mnesia:change_table_copy_type(schema,node(),disc_copies).(拷贝schema到本节点数据库磁盘目录)。
5、可以执行下面代码,实现数据库表的拷贝。
6、lists:foreach(fun(Table)->
Type=call(Node,mnesia,table_info,[Table,storage_type]),mnesia:add_table_copy(Table,node(),Type)end,mnesia:system_info(tables)--[schema])。
如图4所示,基于Erlang语言开发的MQTT消息服务器处理客户端共享订阅流程,假设客户端A和B都订阅了相同的主题$queue/topic1。
1、首先mqtt_clent服务启动mqtt_client_A进程接收inet_async异步消息。收到该消息后调用mqtt_parser模块进行解析。
2、mqtt_client_A进程中会调用received一直接受消息,知道该订阅报文完整的接收。
3、mqtt_parser模块中的parse函数负责主要的解析工作,通过模式匹配,尾递归处理二级制报文,匹配出mqtt报文头和消息体。
4、上面解析出来的头部信息保存在mqtt_packet_header的结构体中,有retain,cleanflag,qos等标志,后续会根据这些属性进行相应的处理。
5、在上面的整个过程都都会对报文的合法性进行判断,避免处理异常报文,使得报文严格准守MQTT协议标准。
6、调用mqtt_protocol的订阅处理函数process(?SUBSCRIBE_PACKET(PacketId,RawTopicTable),State=#proto_state{})处理具体的订阅流程。再调用parse_topic_table函数,对$queue/topic1进行解析,将该共享主题保存在Key为share的map映射中。
然后调用check_acl(subscribe,Topic,Client)函数验证client A是否能进行topic1的订阅。
8、如果是允许的,把该订阅信息,以及相关上下文传送到客户端会话mqtt_session_clientA维护的消息队列中,并等待mqtt_session_client会话进程处理该订阅。
9、handle_cast处理接收到的subscribe消息,判断该topic1是否重复,如果topic1重复且Qos也一致,不做处理,返回。如果topic1一直,但qos不一致,需要对map中的topic1数据进行修改。
10、如果不是重复的,使用嵌套调用的方式调用mqtt:subscribe-->mqtt_server:subscribe函数。该函数会在进程池中取出空闲的mqtt_server_A进程处理消息队列中的订阅消息。
11、查找ets:mqtt_subproperty内存表中是否有该主题的属性数据,如果没有,则存储类似这样的数据{{<<"topic1">>,{<<"clientid_A">>,<0.2500.0>}},[{qos,1},{share,<<"group">>}]}。
12、发送异步处理消息到mqtt_pubsub进程,该进程通过主题类别进行分别处理。如果主题是本节点主题,就把生成的消息发送到mqtt_router进程处理。如果是share主题则调用mqtt_router模块中单独的函数进行处理。
13、本节点保存订阅信息和本地路由信息:
ets:mqtt_local_route类似这样的数据:{<<"topic1">>,'mqtt@127.0.0.1'}
ets:mqtt_subscriber类似这样的数据:{{local,<<"topic1">>},{<<"clientid_A">>,<0.3477.0>}}
14、如果是共享订阅的主题在mqtt_route和mqtt_subscriber这两个ets路由表中有主题数据则跳过存储路由信息流程;否则需要调用mqtt_router:add_route添加共享订阅关系到相应的表中,并根据主题是否包含#,+通配符生成主题树,添加到表add_trie_route中,添加路由信息到mnesia:mqtt_route分布式路由表中。
15、应答suback返回订阅完成通知,提示订阅成功。
B客户端的$queue/topic1订阅流程同上述的A客户端$queue/topic1订阅流程,就不再单独叙述。
如图5所示,基于Erlang语言开发的MQTT消息服务器处理客户端发布消息流程,并对消息路由到指定的订阅客户端的流程。
假如客户端C需要发布客户端发布主题topic1的消息,C不需要在topic前加任何的共享订阅前缀。因为发布共享订阅主题的消息对于发布端而言是完全透明的。
1、首先进程池中连接监听进程mqtt_client_C接收inet_async异步消息。收到该消息后调用mqtt_parser模块进行解析。
mqtt_client_C进程中会调用received一直接受消息,直到完整接收发布报文。
3、mqtt_parser模块中的parse函数负责主要的解析工作,通过模式匹配和尾递归方式解析二级制发布报文,匹配出mqtt报文头和消息体。
4、上面解析出来的头部信息保存在mqtt_packet_header的结构体中,有retain,cleanflag,qos等标志,后续会根据这些属性进行相应的处理。
5、在上面的整个过程都会对报文的合法性进行判断,避免处理异常报文,使得报文严格准守MQTT协议标准。
6、调用mqtt_protocol的发布处理函数process(Packet=?PUBLISH_PACKET(_Qos,Topic,_PacketId,_Payload),State=#proto_state{})处理具体的发布流程。首先在改函数中会调用mqtt_access_control:check_acl函数判断是否该客户端具有发布消息的权限。
7、通过ACL认证的消息会根据Qos=0,Qos=1,Qos=2的不同启动不同的发布流程。
8、接下的流程都是基于Qos0的发布消息处理流程,Qos1是在Qos0的基础上添加了PUBACK报文处理;Qos2是在Qos1的基础上,客户端会话进程mqtt_session_C启动定时进程监控PUBREL,并处理相应返回消息认证流程。
9、按照这样的模块调用关系mqtt_session->mqtt_server->mqtt_pubsub获取订阅该主题的路由信息ets:mqtt_route和关系树信息mnesia:mqtt_trie。
10、结合map信息和ets路由表,mnesia表判断是否需要遍历mqtt节点,如果本节点存在了该主题订阅,获取ets:mqtt_subscriber表信息,并找到该客户端会话如mqtt_session_A(A,C与同一个服务器节点建立了连接),向该会话进程发送消息,不再遍历其他节点,也不在向其他节点发送该消息。
11、如果本节点没有该主题的订阅客户端(例如A,B客户端均没有与C处于同一服务器的连接),就需要以轮训的方式获取其他节点的负载情况,并通过rpc(nodeid,pid,message)函数向其他节点的订阅客户端mqtt_session_A发送消息。
在整个流程中会启动不同的进程,并在进程间通过消息队列传送异步消息。由于Erlang进程的启动,销毁,消息传输的开销很小,所以不用担心性能的问题,反而是多进程方式更能最大化的利用系统资源,协同完成订阅操作。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (5)

1.一种基于MQTT服务器集群实现共享订阅的方法,其特征在于,包括以下步骤:
A、设置共享订阅主题:在标准的主题定义前设置共享订阅前缀,所述共享订阅前缀包括队列共享订阅前缀和分组共享订阅前缀;
B、搭建基于Erlang mnesia集群技术的MQTT服务器集群,该MQTT服务器集群包括基于事件驱动架构、mnesia分布式数据库、ets路由表和map分组映射的智能路由系统;
C、基于分层架构设计对MQTT服务器集群的结构进行优化;
D、进入共享订阅处理流程,具体包括:
D1、订阅客户端通过负载均衡LB同MQTT服务器集群节点建立连接;
D2、订阅客户端订阅MQTT的共享订阅前缀;
D3、MQTT服务器节点客户端后台收发消息进程mqtt_client收到订阅客户端的订阅报文;
D4、对报文信息进行解析,并判断MQTT服务器版本,以及各参数是否完整;
D5、调用MQTT服务器的ACL模块,进行订阅权限验证,如果权限允许才进行相应的后续MQTT订阅流程;
D6、解析MQTT的共享订阅主题,并通过map分组映射的智能路由系统使用相应的分组map和队列map进行存储;
D7、订阅模块收到相应的消息后,判断该订阅的类型,如果该订阅是共享订阅,则调用订阅模块中的处理函数,判断共享订阅是否完整和重复,并保存到mnesia分布式数据库中;如果该订阅是本地订阅,则调用路由模块,存储本地订阅路由和订阅信息到相应的ets路由表中;
E、进入消息发布流程,具体包括:
E1、发布客户端通过负载均衡LB同MQTT服务器集群节点建立连接;
E2、发布客户端发布没有共享订阅前缀的主题消息;
E3、MQTT服务器启动单独的进程进行报文的接收;
E4、解析报文,并判断报文的完整性,以及报文类型是否符合发送协议规范;
E5、调用MQTT服务器的ACL模块,并判断发送报文处理权限;
E6、如果报文是Qos0,在发布客户端会话进程中调用pub_sub模块,所述pub_sub模块判断是否需要遍历所有的集群节点查找消息路由,通过在mnesia分布式数据库中遍历节点信息,获取该节点和主题树信息,判断该节点是否有订阅者,如果该节点有订阅者,则不需要访问其他节点,调用route模块访问mqtt_route内存表,获取路由信息和mnesia分布式数据库中主题树信息,分析出最优的路由信息,选择一订阅客户端会话进程进行通信。
2.根据权利要求1所述的基于MQTT服务器集群实现共享订阅的方法,其特征在于,所述步骤C中,将MQTT服务器集群的结构具体分成:
连接层,用于TCP连接及MQTT协议的编解码;
会话层,用于MQTT协议发布订阅消息交互流程;
路由层,用于节点内路由派发MQTT消息;
分布层,用于分布节点间路由MQTT消息。
3.根据权利要求1所述的基于MQTT服务器集群实现共享订阅的方法,其特征在于,在所述步骤D6后还包括以下步骤:
调用该客户端会话进程判断订阅是否是重复订阅,如果是重复订阅则返回订阅响应,告知订阅完成;如果不是重复订阅,则通过进程间消息队列方式传输相应的维护信息和订阅信息到处理进程,处理进程存储订阅信息到mqtt_route内存表中。
4.根据权利要求1所述的基于MQTT服务器集群实现共享订阅的方法,其特征在于,所述步骤E还包括:
E7、如果报文是Qos1,则还需要添加PUBACK消息处理流程。
5.根据权利要求4所述的基于MQTT服务器集群实现共享订阅的方法,其特征在于,所述步骤E还包括:
E8、如果报文是Qos2,则还需要在客户端会话中启动新进程,并定时判断PUBREL信息,并进行处理。
CN201910446488.3A 2019-05-27 2019-05-27 基于mqtt服务器集群实现共享订阅的方法 Active CN110336736B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910446488.3A CN110336736B (zh) 2019-05-27 2019-05-27 基于mqtt服务器集群实现共享订阅的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910446488.3A CN110336736B (zh) 2019-05-27 2019-05-27 基于mqtt服务器集群实现共享订阅的方法

Publications (2)

Publication Number Publication Date
CN110336736A CN110336736A (zh) 2019-10-15
CN110336736B true CN110336736B (zh) 2021-04-06

Family

ID=68140395

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910446488.3A Active CN110336736B (zh) 2019-05-27 2019-05-27 基于mqtt服务器集群实现共享订阅的方法

Country Status (1)

Country Link
CN (1) CN110336736B (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110891014A (zh) * 2019-11-28 2020-03-17 北京宁云科技有限公司 基于硬件的mqtt发布订阅方法及系统
CN111212135A (zh) * 2019-12-31 2020-05-29 北京金山云网络技术有限公司 消息订阅方法、装置、系统、电子设备及存储介质
CN111562992A (zh) * 2020-04-14 2020-08-21 广东博智林机器人有限公司 客户端的消息消费方法、装置、电子设备及存储介质
CN111669716B (zh) * 2020-04-30 2022-04-12 杭州涂鸦信息技术有限公司 一种网络对讲机的通信方法及通信系统
CN111711663A (zh) * 2020-05-26 2020-09-25 北京金山云网络技术有限公司 发布及订阅服务的处理方法、装置及电子设备
CN111782417B (zh) * 2020-06-22 2023-10-31 北京计算机技术及应用研究所 一种基于消息的多进程共享串口资源的实现方法
CN111866092B (zh) * 2020-06-30 2022-06-28 北京百度网讯科技有限公司 消息传输的方法、装置、电子设备和可读存储介质
CN113301088B (zh) * 2020-07-27 2022-06-03 阿里巴巴集团控股有限公司 消息处理方法、装置、系统、电子设备及可读存储介质
CN112073960B (zh) * 2020-08-14 2023-06-20 浙江三维通信科技有限公司 译码方法、译码系统、电子装置和存储介质
CN112667928B (zh) * 2020-12-11 2024-05-24 北京中数创新科技股份有限公司 一种基于Handle系统的前缀及标识数据安全订阅方法及系统
CN113454969B (zh) * 2020-12-31 2023-09-19 商汤国际私人有限公司 信息交互方法和装置、设备、系统及存储介质
CN112765091B (zh) * 2021-02-04 2024-05-03 南方电网科学研究院有限责任公司 一种SoC核间通信方法和装置
CN112929437A (zh) * 2021-02-05 2021-06-08 中国石油大学(北京) 基于物联网mqtt技术框架的数据传输系统、方法及装置
CN113242272B (zh) * 2021-03-24 2022-12-20 中国雄安集团数字城市科技有限公司 基于mqtt服务集群的会话处理方法及系统
CN114500583A (zh) * 2021-04-26 2022-05-13 华北电力大学 一种基于mqtt协议的配电物联网实时通信方法
CN113595906B (zh) * 2021-07-26 2022-10-21 烽火通信科技股份有限公司 一种基于策略收敛的路由订阅方法与系统
CN114051030B (zh) * 2021-11-11 2024-03-22 广东睿住智能科技有限公司 通讯方法、通讯装置、智慧社区系统和存储介质
CN114390033A (zh) * 2021-12-28 2022-04-22 国网天津市电力公司营销服务中心 基于可扩展通信协议的回路状态巡检仪采集系统及方法
CN114003413B (zh) * 2021-12-30 2022-04-26 深圳佑驾创新科技有限公司 一种ipc数据通信方法、装置、设备及介质
CN114090303B (zh) * 2022-01-14 2022-05-03 杭州义益钛迪信息技术有限公司 软件模块调度方法、装置、电子设备、存储介质及产品
CN114584505B (zh) * 2022-01-25 2024-04-09 威胜信息技术股份有限公司 一种基于发布订阅的边边通讯消息路由方法
CN114615277B (zh) * 2022-03-04 2024-01-16 杭州觅恒科技有限公司 一种基于emq x的多集群动态扩展方法及系统
CN114866504B (zh) * 2022-03-25 2024-02-23 安徽南瑞中天电力电子有限公司 一种基于mqtt消息协议的能源控制器进程间的通信方法
CN116827929A (zh) * 2022-03-27 2023-09-29 西安即刻易用网络科技有限公司 一种基于mqtt协议的通信系统及通信方法
CN114900523A (zh) * 2022-05-09 2022-08-12 重庆标能瑞源储能技术研究院有限公司 一种物联网架构下的定向式负载均衡数据流处理方法
CN115225466B (zh) * 2022-06-10 2024-03-05 国家计算机网络与信息安全管理中心 一种基于mqtt服务的底层动环平台切换方法及装置
CN115022392B (zh) * 2022-06-24 2024-04-30 浪潮软件集团有限公司 面向iot的分布式发布订阅服务方法和系统
CN115914246A (zh) * 2022-10-08 2023-04-04 广州市玄武无线科技股份有限公司 离线消息的点对点通信方法、系统、装置及存储介质
CN116208379B (zh) * 2022-12-30 2023-08-22 金茂云科技服务(北京)有限公司 物联网设备mqtt主题发布订阅权限校验方法及系统
CN117614963A (zh) * 2023-10-20 2024-02-27 云南兆讯科技有限责任公司 一种分布式mqtt消息服务器
CN117560415B (zh) * 2024-01-11 2024-03-22 德阳城市智慧之心信息技术有限公司 智慧社区微服务架构mqtt异步和同步通信方法和系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108429665A (zh) * 2018-03-22 2018-08-21 四川长虹电器股份有限公司 一种并发通信传输数据的方法
EP3367627A1 (en) * 2017-02-28 2018-08-29 Hewlett Packard Enterprise Development LP Performing a specific action on a network packet identified as a message queuing telemetry transport (mqtt) packet
CN108886667A (zh) * 2017-12-15 2018-11-23 深圳市大疆创新科技有限公司 无线通信方法、设备及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10225219B2 (en) * 2016-02-22 2019-03-05 International Business Machines Corporation Message delivery in a message system
CN108055306A (zh) * 2017-12-06 2018-05-18 深圳市智物联网络有限公司 一种物联网中数据处理方法、相关设备及系统
CN108768826B (zh) * 2018-05-16 2021-03-19 华南理工大学 基于MQTT和Kafka高并发场景下的消息路由方法
CN108965447A (zh) * 2018-07-27 2018-12-07 四川爱创科技有限公司 数据采集和远程控制的方法及系统
CN109088723B (zh) * 2018-10-26 2021-08-06 四川长虹电器股份有限公司 一种基于mqtt协议的远程控制方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3367627A1 (en) * 2017-02-28 2018-08-29 Hewlett Packard Enterprise Development LP Performing a specific action on a network packet identified as a message queuing telemetry transport (mqtt) packet
CN108886667A (zh) * 2017-12-15 2018-11-23 深圳市大疆创新科技有限公司 无线通信方法、设备及系统
CN108429665A (zh) * 2018-03-22 2018-08-21 四川长虹电器股份有限公司 一种并发通信传输数据的方法

Also Published As

Publication number Publication date
CN110336736A (zh) 2019-10-15

Similar Documents

Publication Publication Date Title
CN110336736B (zh) 基于mqtt服务器集群实现共享订阅的方法
KR101987784B1 (ko) 소프트웨어 정의 네트워크를 기반으로 내용 배포 네트워크를 구현하는 방법 및 시스템
CN105721473B (zh) 一种web端远程调用优化的方法及系统
US8140695B2 (en) Load balancing and failover of distributed media resources in a media server
US7861174B2 (en) Method and system for assembling concurrently-generated content
Braun et al. Service-centric networking
CN109756559B (zh) 面向嵌入式机载系统分布式数据分发服务的构建及使用方法
CN108768826A (zh) 基于MQTT和Kafka高并发场景下的消息路由方法
CN110430274A (zh) 一种基于云存储的文件下载方法及系统
CN101326493A (zh) 用于多处理器服务器中的负载分配的方法和装置
CN109040232A (zh) 一种视频会议的负载均衡方法、装置、设备及其存储介质
CN111031113B (zh) 一种支持平台级客服系统的用户排队方法
CN111651476A (zh) 一种物联网关中mqtt主题的快速匹配方法及系统
CN112583895B (zh) Tcp通信方法、系统及装置
CN114338063B (zh) 消息队列系统、业务处理方法及计算机可读存储介质
CN110445723A (zh) 一种网络数据调度方法及边缘节点
CN114978683A (zh) 一种基于mqtt协议的反向代理系统
CN111614726B (zh) 一种数据转发方法、集群系统及存储介质
CN107483628A (zh) 基于dpdk的单向代理方法及系统
CN102986196B (zh) 分布于通信结构上的节点利用具有多准则选择的拓扑服务器访问网络
JP2023547880A (ja) バックアップネットワーク機能を提供するためのネットワークノードおよびネットワークノードにおける方法
CN109040199A (zh) 一种分发资源数据的方法、系统及存储介质
CN101369915B (zh) 可运营p2p网络资源管理系统
US10334023B2 (en) Content distribution method, system and server
US20150244871A1 (en) Workload balancing technique for a telephone communication system

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