Java语言使用exhook设置不起作用的问题。


使用Java语言开发钩子,我期望对客户端发起的订阅设置No Local Flag。相关代码见截图,控制台上已经正确配置并连通了这个钩子服务程序,订阅操作时通过打印的request信息日志也能观察到信息已经替换,后台服务和broker日志中也无观测到任何相关的异常信息。没有报错,但是这个钩子设置的NL没有产生任何效果。请教下这个问题出在哪里?谢谢。

mqtt broker版本 5.7.1
开发这个钩子的程序是使用github上for-emqx-v5.4这个分支版本上修改的。

你好,在 ExHook 中,除了 认证(onClientAuthenticate)、授权(onClientAutorize)和消息发布(onMessagePublish)这三个钩子可以修改返回值外。

其他所有的钩子都只是通知,无法修改原本的请求。所以是无法通过 ExHook 来修改客户端订阅的 No Local 标志位的。

还有一种方案是是通过插件,写一个 Erlang 插件来挂在这个 onClientSubscribe 钩子(在 erlang 插件中,这个钩子的名称是 client.subscribe)

在这里是可以改的。

感谢。Erlang不熟。
我最后是在这个订阅的钩子里边通过调用管理监控提供的REST API,对这个设备重新做了一次订阅;感觉做得有点绕,但是实现的效果达到了预期。