环境信息
- EMQX 版本:4.3.11
- 操作系统及版本:ubuntu
- 其他
问题描述
配置文件及日志
发送的消息,规则引擎没有命中,消息丢失
$这个是系统关键字,建议换成其他常规字符串主题尝试
换成其他的topic也是不行的,规则引擎命中不了,消息还是直接丢弃
有订阅这个主题的客户端吗?同时看到流入的速率也一直是0?
这是由于 hook 挂载先后顺序导致的执行优先级问题。文档 v4.3-钩子
我们在 v4.3.14 及 v4.4.3 中增加了 ExHook 挂载优先级的配置。见 v4.3.14 Release Note 及 v4.4.3 Release Note
另外在这两个版本中,在不影响兼容性的情况下,gRPC 调用时增加了 Request Meta
信息。详见 exhook.proto
[ExHook] Unknown responsed value #{type => ‘STOP_AND_RETURN’} to merge to callback chain这个问题应该是exhook影响到的吧,需要怎么处理呢
有更详细的日志么
以及需要知道 ExHook rpc 调用中,是哪个 HookProvider 接口返回了 STOP_AND_RETURN
emqx就只输出了这些,没有其他的日志了,好像是在onMessagePublish的时候触发的
现在没有[ExHook] Unknown responsed value #{type => 这种警告,但是规则引擎还是未命中
这是 hook 挂载的 [先后顺序/优先级] 决定的
在你使用的 v4.3.11 版本中, ExHook 和 规则引擎的钩子优先级都是0, 所以他们的执行顺序按照挂载先后顺序决定,也就是启动的先后顺序。先挂载的先执行。
也就是说目前你的配置中 ExHook 先启动,在执行钩子函数的时候由 ExHook 处理,并返回了 STOP_AND_RETURN,钩子终止执行,所以不会执行规则引擎。
看你的实际需求,
a. 如果你需要让 ExHook 处理过的消息流入规则引擎进行处理。
ExHook 返回 CONTINUE 让钩子继续执行。
b. 先流入规则引擎然后由 ExHook 处理
手动启动 ExHook 以确保规则引擎先于 ExHook 启动。
或升级到支持手动指定 ExHook 执行优先级的高版本,并指定 ExHook 的执行优先级
大于0 → ExHook 先执行(也需要确保 ExHook 返回 CONTINUE)
小于0 → ExHook 后执行(规则引擎挂载钩子时优先级为0)