2016-11-04 52 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") 

它適用於我。我希望這會有所幫助。