环境信息
- EMQ X 版本:4.3.3
- 操作系统及版本:Linux localhost.localdomain 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
- 其他
问题描述
messageArrived方法里publish一个新的主题回应客户端,一直报【等待来自服务器的响应时超时 (32000)】
messageArrived方法里publish一个新的主题回应客户端,一直报【等待来自服务器的响应时超时 (32000)】
消费的太慢导致的队列满了,看起来像是你做的业务有死循环。检查一下Java代码的业务模式。
超时也是队列满了导致的吗
正常情况下是没有问题的,压测时会出现这个问题
消费端能力不足,你压测有订阅者吗?看下是不是消费端性能不够,或者消费端的能力不够。可以加一些消费数量。
压测的时候是有订阅者的,场景是:客户端往A主题发消息,服务端订阅了A主题,服务端收到A主题的消息后往B主题发消息告知,客户端订阅B主题。报错 【等待来自服务器的响应时超时 (32000) 】出现在服务端往B主题发消息的的时候
是同一个客户端同时订阅了A和B吗?
如果是同时订阅了A和B,会产生死循环,A主题的消息消费过程中在B主题中生产了消息,但是A主题的消息还没有消费完成,B主题又堵塞在消息队列中消费不下去。推荐使用不同的终端订阅AB主题。一个生产组一个消费组
不是同一个客户端同时订阅A和B主题。
客户端A订阅B主题,客户端B订阅了A主题;
客户端A往A主题发消息,客户端B收到A主题的消息后往B主题发消息告知,
报错 【等待来自服务器的响应时超时 (32000) 】
出现在客户端B往B主题发消息的的时候
非常可能是B主题的消费能力不足,建议提高一下B主题的消费端能力。
PS:不推荐使用从一个主题消费时在另一个主题生产这种模式,可以使用 exhook 或者 webhook 之类的方式,挂载 message.delivered
或者 message.delivered
钩子。 参考文档。
感谢,感谢
你好,想请问这种情况,如果QOS 为0的话,也会影响吗
QoS 0 可以减少客户端在协议报文往来的压力,但是仍然会产生业务压力,消费能力不足还是不行。