我有一个tomcat REST应用程序,它充当了它后面的许多其他应用程序的API网关。我想为tomcat应用程序添加websocket支持,以便为每个用户会话发送通知更新。这些通知更新将来自其中一个其他应用程序,这些应用程序没有用户会话上下文,但知道应该向哪个用户发送更新(如果此用户当前有一个打开的会话)。
所以要清楚 - 我只想要一个websocket服务器和一个(或多个)应用程序,它只生成要发送给用户会话的消息。
我很清楚,我必须使用full featured broker support和STOMP作为子协议。我们已经使用兔子进行沟通,因此它是显而易见的选择。
文档指出" STOMP代理中继还为每个连接的WebSocket客户端创建单独的TCP连接。" 每个用户会话是一个单独的连接,而不是每个用户。此外,当发送方在同一应用程序(负责处理用户会话的应用程序)内时,每个会话创建一个单独的队列。我想我想要发送消息的其他应用程序必须知道当前活动的会话并将消息发送到代理的相应队列。
Spring Jira中的issue或多或少与我的问题有关。其中一种可能的解决方案是实现分布式UserSessionRegistry。
另一个是使用提供的选项作为同一问题的解决方案 - 启用具有未解析的用户目的地的广播消息。但在这种情况下,我的所有应用程序都将收到这些广播消息。我只希望前面提到的API网关应用程序接收它们(它将是唯一一个暴露给客户端并打开和关闭用户会话的应用程序)。
那么,解决这个问题的正确方法是什么?
答案 0 :(得分:0)
我想为tomcat应用程序添加websocket支持
" tomcat应用程序"是Tomcat REST API网关?我不明白为什么需要一个功能齐全的经纪人,或者至少它似乎是无关的。
发起更新的应用程序服务器需要某种方式来通知网关/ websocket服务器,后者又将消息广播给订阅者。 gateway / webSocket可以通过HTTP接受调用,即通过@RequestMapping
广播处理请求的普通SimpMessagingTemplate
方法。