Spring websocket - 从 websocket 服务器外部向用户目的地发送消息
Spring websocket - send messages to user destinations from outside the websocket server
用例
我有一个 tomcat REST 应用程序,它充当 API 通往其背后许多其他应用程序的网关。我想向 tomcat 应用程序添加 websocket 支持,以便为每个用户会话发送通知更新。这些通知更新将来自其他没有用户会话上下文但知道应该向哪个用户发送更新的应用程序之一(如果该用户当前有一个打开的会话)。
明确一点——我只需要一个 websocket 服务器和一个(或多个)应用程序来生成要发送给用户会话的消息。
我的研究
我很清楚我必须使用 full featured broker support 和 STOMP 作为子协议。我们已经使用 rabbit 进行通信,所以它是显而易见的选择。
文档指出 "the STOMP broker relay also creates a separate TCP connection for every connected WebSocket client." 它是每个用户会话的单独连接,而不是每个用户。此外,当发送方在同一应用程序(负责处理用户会话的应用程序)中时,将为每个会话创建一个单独的队列。我想我的其他想要发送消息的应用程序必须以某种方式知道当前活动的会话并将消息发送到代理处的相应队列。
我找到的可能解决方案
Spring Jira 中的这个 issue 或多或少与我的问题有关。一种可能的解决方案是实现分布式 UserSessionRegistry。
另一种方法是使用提供的选项作为同一问题的解决方案 - 启用具有未解决的用户目的地的广播消息。但在这种情况下,我的所有应用程序都会收到这些广播消息。我只希望前面提到的 API 网关应用程序接收它们(它将是唯一一个暴露给客户端并打开和关闭用户会话的应用程序)。
那么,解决这个问题的正确方法是什么?
I want to add websocket support to the tomcat application
"tomcat application" 是 Tomcat REST API 网关?我不明白为什么需要功能齐全的经纪人,或者至少看起来无关紧要。
发起更新的应用程序服务器需要某种方式来通知 gateway/websocket 服务器,后者会依次将消息广播给订阅者。 gateway/webSocket 可以接受通过 HTTP 的调用,即通过 SimpMessagingTemplate
广播处理请求的普通 @RequestMapping
方法。
用例
我有一个 tomcat REST 应用程序,它充当 API 通往其背后许多其他应用程序的网关。我想向 tomcat 应用程序添加 websocket 支持,以便为每个用户会话发送通知更新。这些通知更新将来自其他没有用户会话上下文但知道应该向哪个用户发送更新的应用程序之一(如果该用户当前有一个打开的会话)。
明确一点——我只需要一个 websocket 服务器和一个(或多个)应用程序来生成要发送给用户会话的消息。
我的研究
我很清楚我必须使用 full featured broker support 和 STOMP 作为子协议。我们已经使用 rabbit 进行通信,所以它是显而易见的选择。
文档指出 "the STOMP broker relay also creates a separate TCP connection for every connected WebSocket client." 它是每个用户会话的单独连接,而不是每个用户。此外,当发送方在同一应用程序(负责处理用户会话的应用程序)中时,将为每个会话创建一个单独的队列。我想我的其他想要发送消息的应用程序必须以某种方式知道当前活动的会话并将消息发送到代理处的相应队列。
我找到的可能解决方案
Spring Jira 中的这个 issue 或多或少与我的问题有关。一种可能的解决方案是实现分布式 UserSessionRegistry。
另一种方法是使用提供的选项作为同一问题的解决方案 - 启用具有未解决的用户目的地的广播消息。但在这种情况下,我的所有应用程序都会收到这些广播消息。我只希望前面提到的 API 网关应用程序接收它们(它将是唯一一个暴露给客户端并打开和关闭用户会话的应用程序)。
那么,解决这个问题的正确方法是什么?
I want to add websocket support to the tomcat application
"tomcat application" 是 Tomcat REST API 网关?我不明白为什么需要功能齐全的经纪人,或者至少看起来无关紧要。
发起更新的应用程序服务器需要某种方式来通知 gateway/websocket 服务器,后者会依次将消息广播给订阅者。 gateway/webSocket 可以接受通过 HTTP 的调用,即通过 SimpMessagingTemplate
广播处理请求的普通 @RequestMapping
方法。