Stomp over SockJS ActiveMQ 中继到多个服务器
Stomp over SockJS ActiveMQ relay to multiple servers
我正在尝试为我们现有的基础设施创建一个合理的客户端-客户端通信设置。我已经阅读 Spring、Websocket、STOMP、SockJS 和 ActiveMQ 的文档一个多星期了,我不确定我正在尝试做的事情是否可行或明智。 Spring 服务器和 JavaScript 客户端已启动并且 运行 相对较快并且在客户端之间发送消息正常工作(从 JS 客户端直接连接到 Spring 服务器)。此设置无法满足我们的需求,因此我们决定在两者之间放置专门的代理。配置 ActiveMQ 是一场噩梦,可能是因为我真的不知道从哪里开始。到目前为止,我还没有与专门的经纪人合作过。
环境
- 170 个独立服务器(Tomcat、Spring、SockJS、STOMP)
- 2 个 ActiveMQ (Artemis) 代理(负载平衡、故障安全)
- 几千个客户端(JavaScript/.NET、SockJS、STOMP)
要求
我需要每个客户都能与其他客户交谈。每条消息都必须由其中一台服务器管理。我希望客户端连接到其中一个 ActiveMQ 代理。 ActiveMQ 代理将保持与每个服务器的单一连接。重点是避免我的所有客户端都必须打开到所有服务器的 170 个 WebSocket 连接。服务器不需要相互通信 (yet/necessarily),因为它们是独立的,具有不同的职责。
问题
ActiveMQ 或任何其他专用代理是否透明可行 proxy/relay 即它能处理这种情况吗?有没有办法动态决定正确的接收者,或者我应该走另一条路,比如自己滚动 Spring基中继?
在传统的消息传递用例中(例如,将 ActiveMQ Artemis 与 STOMP 结合使用),代理管理“目的地”以及发送到这些目的地的任何消息。只有当客户端专门在目标上创建消费者时,才会将消息分派给客户端。
在您的用例中,所有 170 个“服务器”实际上都会向 客户端 发送消息。他们需要在代理上创建一个消费者才能接收消息。需要明确的是,一旦创建了消费者,代理就会在消息到达后立即向其发送消息。
我不确定您所说的“透明”到底是什么意思,但是如果这意味着接收消息的进程不必做任何事情 那么没有消息代理会处理您的用例。
我正在尝试为我们现有的基础设施创建一个合理的客户端-客户端通信设置。我已经阅读 Spring、Websocket、STOMP、SockJS 和 ActiveMQ 的文档一个多星期了,我不确定我正在尝试做的事情是否可行或明智。 Spring 服务器和 JavaScript 客户端已启动并且 运行 相对较快并且在客户端之间发送消息正常工作(从 JS 客户端直接连接到 Spring 服务器)。此设置无法满足我们的需求,因此我们决定在两者之间放置专门的代理。配置 ActiveMQ 是一场噩梦,可能是因为我真的不知道从哪里开始。到目前为止,我还没有与专门的经纪人合作过。
环境
- 170 个独立服务器(Tomcat、Spring、SockJS、STOMP)
- 2 个 ActiveMQ (Artemis) 代理(负载平衡、故障安全)
- 几千个客户端(JavaScript/.NET、SockJS、STOMP)
要求
我需要每个客户都能与其他客户交谈。每条消息都必须由其中一台服务器管理。我希望客户端连接到其中一个 ActiveMQ 代理。 ActiveMQ 代理将保持与每个服务器的单一连接。重点是避免我的所有客户端都必须打开到所有服务器的 170 个 WebSocket 连接。服务器不需要相互通信 (yet/necessarily),因为它们是独立的,具有不同的职责。
问题
ActiveMQ 或任何其他专用代理是否透明可行 proxy/relay 即它能处理这种情况吗?有没有办法动态决定正确的接收者,或者我应该走另一条路,比如自己滚动 Spring基中继?
在传统的消息传递用例中(例如,将 ActiveMQ Artemis 与 STOMP 结合使用),代理管理“目的地”以及发送到这些目的地的任何消息。只有当客户端专门在目标上创建消费者时,才会将消息分派给客户端。
在您的用例中,所有 170 个“服务器”实际上都会向 客户端 发送消息。他们需要在代理上创建一个消费者才能接收消息。需要明确的是,一旦创建了消费者,代理就会在消息到达后立即向其发送消息。
我不确定您所说的“透明”到底是什么意思,但是如果这意味着接收消息的进程不必做任何事情 那么没有消息代理会处理您的用例。