【问题标题】:websocket sessions sample doesn't cluster.. spring-session-1.2.2websocket会话示例不聚集.. spring-session-1.2.2
【发布时间】:2017-03-18 16:07:57
【问题描述】:

我正在测试 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 中看到了两个登录的条目。

我应该期望此示例跨多个服务器运行吗?

提前致谢。

【问题讨论】:

  • 有人能请您花几分钟时间回答这个问题吗?
  • 我对 spring-session-mongo 有同样的问题。与一个应用程序实例完美配合,但如果我添加第二个实例,websocket 不会在实例之间共享。

标签: java spring-data spring-websocket spring-session


【解决方案1】:

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

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

它对我来说很好用。我希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多