EMQX5.0.9 grpc与规则引擎配合使用失效

错误报告

环境

  • EMQX 版本:EMQX开源版5.0.9
  • 操作系统版本:ubuntu 20.04

功能请求

   使用grpc挂载钩子,仅对onMessagePublish事件消息进行数据处理,再通过规则引擎转发消息。

预期行为

  往testtopic/1发送一条消息{"msg":"world"},订阅了testtopic/#收到grpc处理后的消息{"msg":"hello"},规则引擎对处理后的消息进行处理,转发到change/2

实际情况

 向testtopic/1发送{"msg":"hello"},testtopic/# 收到了信息,change/2没有收到;若直接发送{“msg”:“hello”},testtopic/# 和change/2都收到了该信息。等于说规则并没有生效。

重现此问题的步骤

  1. grpc挂载onMessagePublish,将testtopic/#主题消息的payload改为{“msg”:“hello”},设置 value为CONTINUE

     ValuedResponse reply = ValuedResponse.newBuilder()
             .setType(ValuedResponse.ResponsedType.CONTINUE)
             .setMessage(nmsg).build();
     responseObserver.onNext(reply);
     responseObserver.onCompleted();
    
  2. 创建一个规则,SELECT payload FROM “testtopic/#” WHERE payload.msg = ‘hello’,并添加动作将该消息payload转发到change/2主题。

  3. 创建3个客户端连接到emqx broker,1个发布者往testtopic/1发布消息{“msg”:“world”},另外两个一个订阅了change/#主题,一个订阅了testtopic/#主题。

问题

请问上述哪里有问题,我该如何解决,实现这个功能?

在 5.0 中 rule-engine 是先于 exhook 执行的。所以你的规则实际上是比exhook的修改消息体先执行

5.0 里,我感觉可以加一些配置项来控制 exhook 于其他模块的执行的顺序 @Benniu @wivwiv

感谢解答。因此5.x版本目前不支持设置执行顺序对吧?那我选用低版本。