Spring websocket - 来自群集的sendToUser无法从备份服务器运行

时间:2015-09-30 08:42:12

标签: java spring websocket spring-websocket

我们有一个配有弹簧腹架的弹簧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节点推送消息 - 它不会到达用户。

1)我们能做什么?

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

1 个答案:

答案 0 :(得分:1)

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

  

跨服务器群集解析用户目标

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

不要在https://jira.spring.io上发送反馈/改进请求!