我正在测试spring会话websocket示例的聚类。
我按照文档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 :(得分: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")
对我来说很好。我希望它会有所帮助。