关于主题重写的一些想法

描述你需要的功能

我需要把一个主题重写为另一个主题,例如clientid/sun/info重写为campany/clientid/sun/info。

为什么你需要这个功能

使用内置模块的主题重写可以实现此功能,但是如果我很多节点需要重写,规则过多,会严重影响性能。我在想能不能把规则映射成hashmap实现,这样查找时间复杂度为O(1),是不是可能解决此问题。目前再看内置主题重写源代码,请问 emqx_rewrite.erl和 emqx_rewrite_api.erl的分别作用是什么?

如果可以实现此功能,我前端节点可以批量写入主题,不需要为客户制定主题。

主题重写支持占位符和通配符,并不是简单的 one to one map,并不适用 hash 算法

cc @Benniu

我直接一个主题名对应一个重写的主题名可以吗,我hash准备做成这样的,不准备使用匹配规则和占位符

可以的,不过我看你举例的功能可以直接用 mountpoint 实现,不需要用到主题重写

请问mounpolint具体在文档哪里有说明,谢谢您的回答

在这理搜索 mountpoint, 如果是 EMQX 4.x 去 4.x 的文档里面搜索 mountpoint 就行了

在您的建议下看了mountpoint的设置,有些疑问,首先连接端口不是只有8883,1883,8083,8084这四个吗,所有客户song端都是连接到这四个端口下,为什么还可以新建其他端口的监听器。我设备都连接8883端口,clientid/sun/info重写为campany(公司名)/clientid/sun/info,我是根据客户端id不同重写的公司名不同,感觉mountpoint并不能实现

EMQX 可以配置任意多个端口,1883 等只是因为是常用的 MQTT 端口,默认是开启的而已。
你可以 产品A 连接 A 端口,设置 mountpoint 为 公司A, 产品 B 连接 B 端口,设置 mountpoint 为 公司 B.
这是最简单的实现方式,用主题重写的话,可能暂时需要你自己先改下代码了。

您好,在使用插件开发过程中,根据官方文档编译插件模板,出现如下情况:找不到模块下函数定义是什么情况?编译环境:Ubuntu20.04 Erlang OTP25
编译结果:


请问是哪里操作有错误吗

请问,找不到主项目模块下函数是因为主项目编译出错了没有生成beam文件,还是模块不在同级目录无法调用,只对Erlang有浅显的了解,不明白为何出现这种情况