主题重写不生效?

环境信息

  • EMQX 版本:4.4
  • 操作系统及版本:CentOS 7.8
  • docker部署

问题描述

我的需求是将向该主题发送的消息:
device/UXRurdw5/AFmUWsTN/D4A3qw5S
重写主题发送到:
device/UXRurdw5/D4A3qw5S
也就是忽略AFmUWsTN。

配置文件及日志

后台已经启动emqx_mod_rewrite

环境变量配置如下:

EMQX_MODULE__REWRITE__PUB__RULE__1 = "device/+/+/# ^device/(.+)/(.+)/(.+)$ device/$1/$3"

但最终没有生效,请问我的配置是否有误,亦或者有没有可以测试重写的功能组件或者相关日志追踪?
非常感谢!

推荐使用配置文件来管理,环境变量仅仅在启动的时候读一次,后面的优先级就很低了,不读取。
业务调整阶段可以使用debug级别日志来看设备的每一步业务行为走向。看下这个文档设置成debug级别日志

  1. 意思是主题重写配置在环境变量里无效对吗?
  2. 就目前来看,环境变量中的配置优先级是高于配置文件的,那么如果我要使用配置文件,是否意味着需要将原先写在环境变量里的所有都迁移至配置文件才行
  3. debug级别的日志貌似也没有关于主题重写相关的日志

1 建议使用配置文件,方便后续拓展集群&迁移机器
2 我看了代码确实缺少了日志输出,我们会在后续版本中增加这一块的日志,非常不好意思。
3 可以使用命令查看配置:

./bin/emqx eval 'emqx:get_env(modules, [])'

./bin/emqx 路径要根据你的部署方式来改一下

好的,使用配置文件能正常用了。
然后我们开发多次尝试环境变量方法后,发现目标表达式使用$N前需要加上转义符号:

XXX = "device/+/+/# ^device/(.+)/(.+)/(.+)$ device/$1/$3"       (失败)
XXX = "device/+/+/# ^device/(.+)/(.+)/(.+)$ device/\$1/\$3"     (成功)
1 个赞