错误报告
环境
- EMQX 版本:EMQ5.0.11
- 操作系统版本:centos 7.6
重现此问题的步骤
使用规则引擎监听上线事件通过webhook发送上线消息到webserver,server端掉用http api去帮连接订阅相关topic,此时会报{“code”: “RESOURCE_NOT_FOUND”, “reason”: “Client id not found”},但是延迟一段时间后可正常订阅,4.x版本进行该操作时不会有问题,想问下是不是哪里还需要配置的?
使用规则引擎监听上线事件通过webhook发送上线消息到webserver,server端掉用http api去帮连接订阅相关topic,此时会报{“code”: “RESOURCE_NOT_FOUND”, “reason”: “Client id not found”},但是延迟一段时间后可正常订阅,4.x版本进行该操作时不会有问题,想问下是不是哪里还需要配置的?
你看下订阅成功后连接是不是断开了?
订阅成功后连接也没有断开,客户端有挂住的;主要是延迟一段时间后调api可以订阅成功,接收到规则引擎的数据立马调就会报clientid不存在;感觉像是立马掉用连接还没真正建立起来
我看后面的日志里面订阅成功了呀?
我这边没复现出这个问题诶,你是测试环境吗?是的话可以直接开个 debug 日志看看。
你部署的是集群还是单节点?
部署的单节点,现在开的就是debug日志,但是没看到更http请求的报错
你运行一下 emqx remote_console
,进入远程控制台以后,执行一下这几句命令:
dbg:tracer().
dbg:p(all, c).
dbg:tpl(emqx_mgmt, subscribe, cx).
然后再让客户端连接订阅,最后看下日志。
结束以后,执行以下命令停止 debug:
dbg:stop().
我怎么感觉你的 HTTP 请求都没到这个节点上?
正常应该会有这种日志的:
call emqx_mgmt:subscribe(<<"abc">>,[{<<"test">>,#{nl => 0,qos => 0,rap => 0,rh => 0}}])
你直接向 Web Server 发数据的时候,EMQX 这边没有日志,Web Server 那边是什么现象?有触发订阅操作吗?API 响应是什么?
1.直接向web server发送请求能正常订阅,返回就是订阅的topic数组,EMQ这边也是有日志的;
2.通过规则引擎发数据,返回就报错{“code”: “RESOURCE_NOT_FOUND”, “reason”: “Client id not found”},同时EMQ这边也看不到任何日志;
3.我在webserver中做一个延迟(延迟10秒)让规则引擎那边触发超时重发,这时候也是能订阅成功的
你订阅请求的是哪个接口?
18083端口
我的意思是哪个 API
不好意思看错了,api/v5/clients/gtjaTest2/subscribe/bulk,调用的是批量订阅的接口
我刚确认了一下,这确实是一个 Bug,你调用 /subscribe
接口应该是没有问题的。
Bug 我已经反馈至研发团队,我们会尽快修复。