java - Spring websocket - 来自集群的 sendToUser 无法从备份服务器工作

标签 java spring websocket spring-websocket

我们有一个配置了 spring websocket 的 spring mvc('spring-websocket',版本:'4.1.0.RELEASE')。

我们有一个执行以下代码的简单类:

 @Autowired
private SimpMessagingTemplate template;


@Override
public void push(Long userId, Object message, WebsocketQueue queue) {

   String loginName = this.userRepository.getLoginName(userId);

   this.template.convertAndSendToUser(
                   loginName,
                   queue.getMapping(),
                   message);

}

这对于单个 tomcat(非集群环境)非常有效

我们面临的问题是在使用两个 tomcat 组成的集群时。

如果我们尝试将消息从实际登录的 Tomcat 推送给用户 - 它会起作用。

但是如果我们尝试从其他 tomcat 节点推送消息 - 它不会到达用户。

1)我们能做什么?

2)将 websocket 队列名称更改为用户登录名而不是默认行为对我们有帮助吗?

最佳答案

这可以通过 a feature added in Spring Framework 4.2 来解决:

Resolve user destinations across cluster of servers

用户注册表可以使用特定主题目标来广播和共享其内容。您可以通过为集群部署配置 StompBrokerRelay 来进行设置;请参阅setUserDestinationBroadcastsetUserRegistryBroadcast .

请随时向 https://jira.spring.io 发送反馈/改进请求!

关于java - Spring websocket - 来自集群的 sendToUser 无法从备份服务器工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861645/

相关文章:

java - 在 SPRING MVC 中绑定(bind)嵌套对象

javascript - Chrome 10.0.612 开发 Websocket 问题?

Ajax 与 Socket.io

java - 继承和抽象如何与多个类一起工作? [java]

java - 使用 Hibernate 管理 MySQL 分区

java - Spring AsyncResttemplate HTTPs (SSL) 服务调用

java - 数据源对象被 Cloud Foundry 配置覆盖

java - 表格单元格中的列表项未设置格式

java - Spring MVC 覆盖接收到的内容类型

c# - .NET 网络套接字返回 200 错误