2016-11-04 1 views
0

Je suis en train de tester le clustering d'un échantillon websocket de sessions de printemps.L'échantillon de sessions websocket ne se regroupe pas. Spring-session-1.2.2

Je cours l'échantillon comme décrit dans les documents: http://docs.spring.io/spring-session/docs/current/reference/html5/guides/websocket.html. Code de: https://github.com/spring-projects/spring-session/archive/1.2.2.RELEASE.zip.

Si j'exécute l'application sur un serveur Tomcat, tout fonctionne comme prévu. Mais si je cours deux applications sur deux serveurs tout ne fonctionne pas.

Je démarre l'application sur chacun des deux serveurs Tomcat à 8080 et 8090 et me connecte à chacun. 8080 arrive comme prévu. 8090 apparaît comme prévu et répertorie le nom d'utilisateur pour 8080. Mais le nom d'utilisateur pour 8090 n'est jamais ajouté à la liste sur 8080.

Si j'actualise la page Web pour 8090 l'utilisateur est supprimé de la liste et l'utilisateur pour 8090 est ajouté à la liste pour 8080. Ce cycle se poursuit avec les deux applications.

Il semble que les sessions de printemps partagent des informations de session. Je vois des entrées dans Redis pour les deux connexions.

Dois-je m'attendre à ce que cet exemple s'exécute sur plusieurs serveurs?

merci d'avance.

+0

Y at-il quelqu'un qui peut prendre quelques minutes pour répondre à cette question? – criedluv

+0

J'ai le même problème avec spring-session-mongo. Fonctionne parfaitement avec une instance d'application mais si j'ajoute une seconde instance, websocket n'est pas partagé entre les instances. –

Répondre

0

Je suppose que vous avez configuré un relais stomp broker et que vous avez utilisé la classe AbstractSessionWebSocketMessageBrokerConfigurer pour configurer WebSocket avec une session Spring. Après cela, cluster ne fonctionne toujours pas car le mécanisme de publication par défaut utilise un sessionRepository local pour résoudre l'ID de socket pour un utilisateur. Nous ne voulons pas de ce mécanisme. Nous devons utiliser un référentiel distant. removeRepository existe déjà dans sprint. Pour activer il suffit de configurer votre MessageBrokerRegistry:

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

Cela fonctionne très bien pour moi. J'espère que ça va aider.