[发明专利]基于MQTT和Kafka高并发场景下的消息路由方法有效
| 申请号: | 201810465578.2 | 申请日: | 2018-05-16 |
| 公开(公告)号: | CN108768826B | 公开(公告)日: | 2021-03-19 |
| 发明(设计)人: | 陆璐;冼允廷;黄佳文 | 申请(专利权)人: | 华南理工大学;中山市华南理工大学现代产业技术研究院 |
| 主分类号: | H04L12/58 | 分类号: | H04L12/58;H04L29/08;H04L12/803;H04L12/24 |
| 代理公司: | 广州市华学知识产权代理有限公司 44245 | 代理人: | 林梅繁 |
| 地址: | 510640 广*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 mqtt kafka 并发 场景 消息 路由 方法 | ||
1.基于MQTT和Kafka高并发场景下的消息路由方法,其特征在于,包括以下步骤:
利用Kafka的分区机制接收高并发场景下的用户消息,并以顺序写的方式写入磁盘,同时基于发布/订阅模式的消息队列进行保存,利用Kafka代理集群实现负载均衡;
然后通过Kafka Stream将消息检索过滤,持久化存入数据库,并保持对接收端状态的监听;将过滤后的数据发送到MQTT服务器中,保存在不同的Topic下;
所述通过Kafka Stream将消息检索过滤,持久化存入数据库,并保持对接收端状态的监听,具体为:
对保存在每个分区下的消息记录,通过Kafka Stream建立一个流处理拓扑,并将键值对反序列化为数据对象的方式进行处理;
所述流处理拓扑中包含有一个Source处理节点、一个Sink处理节点以及M个自定义的处理节点,利用聚合操作可将消息记录为空的数据筛选过滤;其中M≥2;
过滤后的数据序列化后会发送至订阅了相应Topic的消费端,在消费端中,通过多线程将消息记录持久化数据库,并通过回调函数处理持久化后的结果;
另外,消费端还需订阅另外一个主题用于监听接收端的在线状态,并维持有一个在线列表;
最后由MQTT协议中订阅了不同Topic的接收端进行匹配,获取消息,并且接收端在每次上线或下线时都将发送状态消息以更新在线列表;
所述接收端在每次上线或下线时都将发送状态消息以更新在线列表,具体为:
启动接收者时需设定服务质量和是否清除Session;因为接收端需获取离线消息,所以要保存Session,并将服务质量设定为At Least Once;
另外,设定遗嘱消息,当接收者下线时,将下线消息发给Kafka,避免消息在MQTT服务器中一直得不到消费,占用内存空间;当重新上线时,则再一次把消息发给Kafka,以更新其维持的在线的接收端的列表。
2.根据权利要求1所述基于MQTT和Kafka高并发场景下的消息路由方法,其特征在于,所述利用Kafka的分区机制接收高并发场景下的用户消息,是依赖于磁盘顺序写的方式来存储和缓存消息的,且具有一定的时间期限;用户在客户端进行消息的发送时,指定消息要送达的分区,将partitioner.class设置为自定义的分区,并在partition()中设定消息发送到分区的具体规则。
3.根据权利要求2所述基于MQTT和Kafka高并发场景下的消息路由方法,其特征在于,所述用户消息,其记录以Key-Value键值对的方式进行发送,将发送者ID和接受者ID一同作为Key进行发布。
4.根据权利要求1所述基于MQTT和Kafka高并发场景下的消息路由方法,其特征在于,所述将过滤后的数据发送到MQTT服务器中,保存在不同的Topic下,具体为:
在Kafka的消费端,逐条消费事先保存在Kafka Broker分区中的消息,并提取每条消息的Key,Key中包含有该条消息的发送者ID和接收者ID;
发布消息指定Topic时,需将接收者ID作为发送者ID的父级Topic,并在Message Body前加入发送者ID便于接收端解析;
接收者启动后将订阅以自身ID为第一层级的Topic,并使用通配符接收所有以自身ID为第一层级Topic的消息;在对收到的消息解析其Message Body后,辨识出该消息内容的发送源。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华南理工大学;中山市华南理工大学现代产业技术研究院,未经华南理工大学;中山市华南理工大学现代产业技术研究院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810465578.2/1.html,转载请声明来源钻瓜专利网。





