2016-11-04 53 views
0

我正在测试春季会议websocket示例的聚类。websocket会话示例不集群..春季会话1.2.2

我按照文档http://docs.spring.io/spring-session/docs/current/reference/html5/guides/websocket.html中所述运行示例。代码来自:https://github.com/spring-projects/spring-session/archive/1.2.2.RELEASE.zip

如果我在一台Tomcat服务器上运行应用程序,所有工作都按预期运行。但是如果我在两台服务器上运行两个应用程序,则所有这些都无效

我在8080和8090的两台Tomcat服务器上启动应用程序,并登录到每台服务器。 8080按预期出现。 8090按预期方式出现并列出8080的用户名。但8090的用户名永远不会添加到8080的列表中。

如果我刷新8090的网页,用户将从列表中删除,并且用户为8090添加到列表中为8080.该循环继续与两个应用程序。

它似乎春天会议是共享会话信息。我在Redis中看到了登录的条目。

我应该期待这个示例在多个服务器上运行吗?

在此先感谢。

+0

有人可以花几分钟回答这个问题吗? – criedluv

+0

我和spring-session-mongo有同样的问题。 与一个应用程序实例完美协作,但如果我添加第二个实例,websocket不会在实例之间共享。 – 2017-07-26 09:13:01

回答

0

我假设你已经配置了一个stomp代理中继,并且你使用AbstractSessionWebSocketMessageBrokerConfigurer类来配置Spring会话的WebSocket。 之后,群集仍然不起作用,因为默认发布机制使用本地sessionsRepository来解析用户的套接字ID。我们不想要这个机制。我们需要使用远程存储库。 removerepository已经存在于sprint中。要激活它,你只需要配置你的MessageBrokerRegistry:

registry.enableStompBrokerRelay("/topic/", "/queue/", "/exchange/") .setUserDestinationBroadcast("/topic/logbook-unresolved-user") .setUserRegistryBroadcast("/topic/logbook-user-registry") 

它适用于我。我希望这会有所帮助。