EMQX使用exhook后影响规则引擎的使用

环境信息

  • EMQX 版本:4.3.11
  • 操作系统及版本:ubuntu
  • 其他

问题描述

配置文件及日志

发送的消息,规则引擎没有命中,消息丢失

$这个是系统关键字,建议换成其他常规字符串主题尝试

换成其他的topic也是不行的,规则引擎命中不了,消息还是直接丢弃

有订阅这个主题的客户端吗?同时看到流入的速率也一直是0?


使用客户端工具订阅这个主题,有消息流出的记录,没有流入记录,规则引擎也没命中

这是由于 hook 挂载先后顺序导致的执行优先级问题。文档 v4.3-钩子
我们在 v4.3.14 及 v4.4.3 中增加了 ExHook 挂载优先级的配置。见 v4.3.14 Release Notev4.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 服务在返回 ValuedResponse 的时候没有带上 value 这个字段
exhook.proto line:299

现在没有[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)