3

我们想使用 spring websockets + STOMP + amazon MQ 作为一个全功能的消息代理。我们试图进行基准测试,以找出单个 tomcat 节点可以处理多少客户端 websocket 连接。但似乎我们首先达到了 amazonMQ 连接限制。根据aws 文档,amazonMQ 每个节点的连接限制为 1000 个(据我了解,我们可以要求支持来增加限制,但我怀疑它是否可以大幅增加)。所以我的问题是:

1)我是否正确假设对于从客户端到 spring/tomcat 服务器的每个 websocket 连接,从服务器到代理打开相应的连接?这是正确的行为还是我们在这里做错了什么/遗漏了什么?

2)在这里可以做什么?我的意思是,我认为为每 1000 个用户创建代理节点不是一个好主意。

4

1 回答 1

2

根据https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.html,您所做的一切都是正确的,并且记录在案的行为。

来自 javadoc 的引用:

对于每个新的 CONNECT 消息,将打开一个到代理的独立 TCP 连接,并专门用于来自发起 CONNECT 消息的客户端的所有消息。来自同一客户端的消息通过会话 id 消息头来标识。相反,当 STOMP 代理在 TCP 连接上发回消息时,这些消息会使用客户端的会话 id 进行丰富,并通过提供给构造函数的 MessageChannel 发送回下游。

至于修复,您可以编写自己的消息代理中继,使用 tcp 连接池。

于 2019-11-25T08:41:22.753 回答