EMQ 问答社区

钩子服务,接收到消息,需要直接根据消息内容发送topic给终端

环境信息

  • EMQ X 版本:4.3.1
  • 操作系统及版本:centos7
  • 其他

问题描述

钩子程序已经可以接收到emqx发过来的消息(如topic是:aaa\bbb),现在我们想直接给终端回复一个消息(如topic:aaa\bbb_reply),钩子服务需要怎么处理?

配置文件及日志


可以将钩子指向web服务(当然这个得你自己写),在你的web服务里处理消息内容,然后借助SDK或者直接使用http接口发布消息到主题aaa\bbb_reply

你们有没计划直接钩子服务能发布topic?如 HookProviderGrpc.HookProviderImplBase增加已经接口sendMessage,在原来接口onMessagePublish中的参数StreamObserverreply = ValuedResponse.newBuilder().setBoolResult(true).setType(ValuedResponse.ResponsedType.STOP_AND_RETURN).build()增加类型(类似:ResponsedType.STOP_AND_RETURN),当是该类型就发送消息给emqx broker,这样终端订阅就能接受到消息了;
感觉这样使用更加符合业务场景;调用http api虽然也能处理,然http效率方面肯定没有grpc好。
谢谢!

1、我不是官方的。
2、使用钩子扩展目前也能实现你说的情况,只不过就是自己写业务逻辑(收到消息后,判断是否需要回复,需要的话调用发布接口去发布主题)。
3、你的需要回复,是用来判断EMQX是否收到还是根据主题来决定?第一种情况,指定qos的值就可以,第二种目前只能根据你的业务写。

我们是根据topic来判断是否回复的,非常感谢!