目前想实现MQTT ACL,Topic有固定的规则可循。Topic含有设备名,鉴权策略:设备只允许订阅和发布只属于自己的Topic。eg: /product_key/device_name/user/update
方案有两种:
- 使用文件ACL+外部数据库
- 使用ExHook, 只需解析Topic,判断鉴权是否通过
方案一:灵活性比较高,但设备比较多,需要维护的规则也多
方案二:灵活性比较低,且可用性依赖于grpc server, 但不需要依赖文件或者外部数据库
在鉴权策略和Topic固定的前提下,个人倾向于方案二,但是对grpc 的调用失败和钩子函数引入过多的性能问题有点担忧。
不知道EMQX官方是否有啥好的建议