我们有一个配有弹簧腹架的弹簧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队列名称更改为用户登录名而不是默认行为可以帮助我们吗?
答案 0 :(得分:1)
这可以通过a feature added in Spring Framework 4.2解决:
跨服务器群集解析用户目标
用户注册表可以使用特定主题目标广播和共享其内容。您可以通过为集群部署配置StompBrokerRelay
来进行此设置;请参阅setUserDestinationBroadcast和setUserRegistryBroadcast。
不要在https://jira.spring.io上发送反馈/改进请求!