繁体   English   中英

Spring Websocket-从Websocket服务器外部向用户目标发送消息

[英]Spring websocket - send messages to user destinations from outside the websocket server

用例

我有一个tomcat REST应用程序,它充当通向其后许多其他应用程序的API网关。 我想将Websocket支持添加到tomcat应用程序,以便在每个用户会话中发送通知更新。 这些通知更新将来自其他应用程序之一,这些应用程序没有用户会话上下文,但是知道应该向哪个用户发送更新(如果该用户当前具有打开的会话)。

明确地说-我只需要一台websocket服务器和一个(或多个)应用程序,该服务器仅生成要发送到用户会话的消息。

我的研究

对我来说很明显,我必须使用STOMP的全功能经纪人支持作为子协议。 我们已经使用Rabbit进行通讯了,这是显而易见的选择。

该文档指出“ STOMP代理中继还会为每个连接的WebSocket客户端创建一个单独的TCP连接。” 它是每个用户会话(而不是每个用户)的单独连接。 同样,当发送方在同一个应用程序(负责处理用户会话的应用程序)内时,将为每个会话创建一个单独的队列。 我想我想发送消息的其余应用程序必须以某种方式知道当前活动的会话,并将消息发送到代理处的相应队列。

我发现的可能解决方案

Spring Jira中的这个问题或多或少与我的问题有关。 一种可能的解决方案是实现分布式UserSessionRegistry。

另一种方法是使用作为解决同一问题的方法提供的选项-启用具有未解决的用户目标的广播消息。 但是在这种情况下,我所有的应用程序都会收到这些广播消息。 我只希望前面提到的API网关应用程序可以接收它们(它将是唯一公开给客户端以及打开和关闭用户会话的应用程序)。

那么,解决此问题的正确方法是什么?

我想将Websocket支持添加到tomcat应用程序

“ tomcat应用程序”是Tomcat REST API网关吗? 我不明白为什么需要一个功能齐全的经纪人,或者至少看起来不相关。

发起更新的应用程序服务器需要某种方式来通知网关/ Websocket服务器,然后网关/ Websocket服务器会将消息广播到订户。 网关/ webSocket可以接受HTTP上的调用,即通过SimpMessagingTemplate广播处理请求的普通@RequestMapping方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM