Golang:MQTT服务集群共享主题设计

本文探讨了一种基于Redis的集群共享订阅方案,通过set和hash数据结构管理订阅。目前仅支持具体主题订阅,不支持通配符,作者正寻求改进。已实现的功能包括订阅与取消订阅操作,以及获取订阅数据。后续计划研究更复杂的通用主题服务和优化通配符匹配功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

本次设计的支持集群的共享订阅的思路,还存在缺陷,无法支持通配符订阅,正在努力实现中,敬请期待,或者有好的点子,欢迎分享哦,谢谢各位。
具体实现用在了该项目中

集群共享订阅

单机共享订阅是非常容易实现的,代码改动也比较小,但是我们今天的角色不是单机的共享订阅,而是集群的

我们采用一个简单的方式来实现部分功能,使用redis的set+hash
具体结果如下图:
在这里插入图片描述

订阅主题

订阅主题时,需要一条lua脚本向redis中操作两个key,分别操作数据
set 的key中往topic key中添加该shareName
然后往hash key中添加node名称与新增数量

取消订阅

相应的减一就行

获取订阅数据

需要获取所有的有关该主题的订阅数据,首先获取该主题所有的共享组,然后拼接主题去获取所有的共享组的数据

具体实现请移步查看:代码仓库

缺陷

只能实现对应的具体主题的订阅,还未实现通配符匹配,
看下面的初步思考
在这里插入图片描述
如果是单独实现的集群通用主题服务还好,用redis去实现感觉太复杂了。之后会继续学习完善的,多考虑几种实现
最新的可移步下一篇查看:最新实现

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值