环境
- EMQX 版本:4.3.11
- 操作系统及版本:docker
emqx_web_hook.conf中的 web.hook.url 地址可达,使用http api等测试工具均10ms内完成交互,配置webhook后,客户端连接EMQX的时长变为15秒,http api中的打印也是15秒才收到connected请求。关闭web_hook插件后,客户端连接正常没有延迟。
请问为什么会导致这种情况,另外看起来webhook是同步的方式,能否配成异步方式,就是不影响客户端连接速度,webhook采用异步方式上传状态给api?
打开webhook后几个小时,发现客户端pub的消息,在接收端订阅时候,要过10几秒才能收到,此时emqx处于轻载状态,宿主机的cpu资源都是轻载。重启容器后恢复,而没有加载webhook时,则运行几个月都不会出现这种状况。请帮忙排查一下这个bug,谢谢!
t1ger
3
你好,请问你的客户端的连接频率是多少?也就是对于你的 WebHook 服务器来说,TPS 是大概是多少?
如果请求响应的平均时延为 10ms,那么一个 HTTP 连接平均每秒就只能处理 100 个请求,一旦超过这个 TPS,就会导致其他的请求的排队延迟。你也可以尝试增大配置文件中 Pool Size 的大小来启用更多的连接。
你好,我们目前在测试环境中,tps很少,不超过2,就2个测试终端在测试,这个问题必现
另外,反复测试后感觉webhook这种同步机制并不友好,按理说webhook应该是一个旁路机制,即便webhook出口中断也不应该影响正常的客户端行为,现在webhook至少可能造成以下2个重大影响:
1、emqx运行一段时候后会导致接收消息延迟,重启emqx后解决
2、客户端上线后被webhook阻塞
而关闭webhook上面2个问题都不存在,我记得还有一种采用引擎来通过mqtt发送客户端状态的机制?
t1ger
6
4.x 底层都是同步机制,所以这个问题暂时无法避免。5.0 中我们改为了异步。
t1ger
7
你除了连接、断开连接事件,还启用了哪些事件?
如果只有连接和断开连接事件,是不会影响到发布订阅的。
目前只启用了连接和断开2个事件,确实影响到了发布,重启emqx后正常,但过一段时间后发布数据,订阅时候延迟接收,或者接收不到。这个问题必现。
t1ger
9
如果你只是测试环境的话,建议可以开启 debug 日志,然后提供一下脱敏后的日志,我来帮你看一下。
感谢!关于web.hook.url这个问题已经查明了,是api中没有返回http end相关的指令,导致接口挂起。
但是上面提到的运行一段时间之后发布消息会变得非常缓慢,不知道和上面问题是否相关,因为并没有开启和发布消息相关的通知,这个问题需要继续观察
t1ger
11
是的,因为从 EMQX 实现方式出现,仅启用连接这些事件不至于影响后面的发布订阅,我也没遇到过类似的情况,所以想看能不能从日志入手。后续观察有问题及时沟通。
请问api中没有返回http end 是什么意思?我也发现webhook有非常大的延迟。消息本来已经到了设备端,但webhook的消息ack一般都要延迟很多秒或几分钟,有的还延迟几十分钟的。