Websockets und Lastenausgleich

8

Spring und Java EE haben eine gute Unterstützung für Websockets. Zum Beispiel im Frühling können Sie haben:

%Vor%

Und mit MyHandler class können Sie Nachrichten an HTML5-Websocket senden und abhören.

%Vor%

Das Problem liegt vor, wenn Sie mehrere Server hinter einem Load Balancer ausführen. Die Clients von Server A werden nicht für Ereignisse auf Server B benachrichtigt.

Dieses Problem wird im Frühjahr durch Verwendung des Nachrichtenbrokers mit dem Stomp-Protokoll ( Ссылка )

gelöst

Da die Benutzung des Handlers und "native" html5-Websockets für mich einfacher aussieht als der Stomp-Weg, sind meine Fragen:

  1. Ist es möglich den Message Broker ohne das Stomp Protokoll zu benutzen?
  2. Gibt es noch andere Möglichkeiten, das Problem der Lastverteilung zu lösen?
Evgeni Dimitrov 20.04.2014, 18:30
quelle

1 Antwort

3

Die Nachrichtenbroker können ohne STOMP verwendet werden, nehmen Sie zum Beispiel den RabbitMQ-Broker , es kann mit mehreren anderen verwendet werden Protokolle; HTTP, AMQP, MQTT, AMQP. Sie können sie als JMS-Implementierung verwenden.

Da es mehrere Instanzen der Anwendung gibt, ist es die beste Alternative, einen zentralen Messaging-Broker für die Verarbeitung von Nachrichten zu verwenden, die auf den Clients aller Anwendungen veröffentlicht werden müssen.

Jede Alternative würde bedeuten, etwas Ähnliches von Hand zu machen, die Server im Backend müssen miteinander kommunizieren und sich gegenseitig auf diese Weise benachrichtigen. Eine Alternative wäre, bestimmte Ereignisse in die Datenbank zu schreiben und jeden Server eine Tabelle abfragen zu lassen, aber das ist die Art von Design, die wir vermeiden wollen.

Auch in Bezug auf Lastenausgleich und Web-Sockets muss der Load Balancer so konfiguriert werden, dass die HTTP-Upgrade-Header weitergeleitet werden können, die normalerweise standardmäßig deaktiviert sind. Zum Beispiel benötigt nginx eine Konfiguration, um das Weiterleiten dieser Header zu ermöglichen, andernfalls werden Websockets nicht funktionieren.

In diesem Fall wird SockJS automatisch einige der Fallback-Optionen verwenden, die eintreten, wenn Web-Sockets nicht möglich sind.

    
Angular University 20.04.2014, 20:50
quelle