2016-04-27 7 views
0

Ich habe die folgende Kamel Route, die Nachrichten auf einem ActiveMQ Thema hört und sofort sendet sie an alle angeschlossenen Web-Socket-Clients. Dies funktioniert, aber die Verbindung zum Thema wird hergestellt, sobald der Routengenerator initialisiert wird.Verbinden/Trennen von ActiveMQ Thema auf Kamel Websocket Verbindung/Trennung

Was ich brauche, ist nur mit dem Thema verbinden, wenn ein oder mehrere Clients mit dem Web-Socket verbunden sind. Sobald keine Verbindung mehr besteht, möchte ich aufhören, das Thema zu hören. Ist das möglich?

Antwort

1

Laut mir gibt es keinen richtigen Weg, dies zu tun. Die einzige Möglichkeit, dies zu erreichen, ist das Überschreiben des Jetty WebSocket-Codes. Sobald Sie den Jetty Websocket-Code überschreiben, erhalten Sie die Flexibilität, Ihren eigenen benutzerdefinierten Code in offenen und geschlossenen Websocket zu schreiben.

  • Pflegen Sie eine Liste für alle Websocket Clients in offenen Websocket. Überprüfen Sie, ob der Websocket geschlossen ist und entfernen Sie ihn aus der Liste, um zu erfahren, wie viele Verbindungen bestehen oder getrennt sind. Oder halten Sie einen Zähler auf öffnen und schließen Websocket.
  • Sobald alle Websocket-Clients geschlossen sind, unterbrechen Sie die Route, damit Ihre Nachrichten im Thema oder in der Warteschlange bleiben.
  • Wenn ein Client mit Websocket verbunden wird, fahren Sie mit der Route fort, so dass die Nachrichten den jeweiligen verbundenen Client erreichen.
+1

Ja, das ist richtig. Wir könnten in Erwägung ziehen, ein from (websocket: test? Events = onConnect, onDisconnect) zu haben, damit Sie die Ereignisse filtern können und diese dann als Route verwenden, auf der Sie controlbus aufrufen können, um diese andere Route mit den AMQ-Themen zu unterbrechen. –

+0

@ClausIbsen Der Zusatz dieser Ereignisse wäre definitiv hilfreich. Es wäre sinnvoll, dies auch der Atmosphere-Websocket-Komponente hinzuzufügen. Kurzfristig dachte ich, dass ich die JMX-Fähigkeiten nutzen könnte, um die Anzahl der Verbindungen abzufragen und die Route entsprechend auszusetzen. Gedanken? –

+0

Ja, Sie können gerne eine JIRA anmelden: http://camel.apache.org/support.html. Wenn Sie die Details in JMX finden können, dann können Sie ja die AMQ-Route steuern. Da Sie die JMX-Statistiken planen müssen, gibt es ein Zeitfenster, in dem Sie etwas zurückgeblieben sind. –