我开发了一个应用程序,我们需要处理通过websocket
连接连接到后端的160k并发用户。
我们决定使用spring websocket
实现和RabbitMQ
作为消息代理。
在我们的应用程序中,每个用户都需要订阅其用户队列/exchange/amq.direct/update
以及其他用户可以订阅/topic/someUniqueName
的其他队列。
在我们的第一次性能测试中,我们采用了天真的方法,每个用户都订阅了两个新队列。
当大约800个用户同时连接时,运行测试RabbitMQ
时会静默死亡,因此大约有1600个队列处于活动状态(See the graph of all RabbitMQ objects here)。
我读了you should be careful opening many connections to RabbitMQ。
现在我想知道approach that is anticipated by Spring Websocket with opening one queue per user是否是高负载系统或系统中存在其他错误的概念问题。
答案 0 :(得分:1)
RabbitMQ的限制因素通常是:
答案 1 :(得分:0)
我确实找到了这个问题。我实际上错误配置了RabbitMQ服务,并给了它1024个文件描述符限制。增加它解决了这个问题。