Ich habe eine Cometd-App im Steg laufen. Ich möchte eingehende Broadcasts von Clients abrufen, dann eine Verarbeitung durchführen (einschließlich der Interaktion mit der db) und dann die Übertragung an alle Abonnenten beenden, wenn keine Fehler auftreten.CometD: Broadcast-Nachrichten vor dem Senden verarbeiten
Mein erster Gedanke ist, dies mit einer Erweiterung zu tun, aber gibt es einen geeigneteren Weg?
Hier ist mein modifizierte Versuch auf @sbordet Antwort basiert:
@Inject
private BayeuxServer bayeux;
@Session
private ServerSession serverSession;
@Listener("/service/*")
public void handle(ServerSession remote, ServerMessage message) {
System.out.println("Message received on service: " + message);
String broadcastChannel = message.getChannel().replace("/service", "");
System.out.println("bayeux: " + bayeux + " - sending: " + broadcastChannel + " - " + message.getData());
System.out.println("bayeux.getChannel(broadcastChannel): " + bayeux.getChannel(broadcastChannel));
bayeux.getChannel(broadcastChannel).publish(serverSession, message.getData());
}
Grund mag ich für alle Servicekanäle hören, und einige Verarbeitung tun, dann auf den gleichen Broadcast-Kanal veröffentlichen, weniger der Service. Also,/service/test wird/test.
Dieser Strom liefert eine Null für bayeux.getChannel(broadcastChannel)
Wenn ich 'bayeux.getChannel (broadcastChannel)) verwende;} dann gibt' getChannel() 'Methode null zurück ... – mtyson
Ich nehme den Dienstkanal,'/service/test' und dann über '/ test' - Das scheint die richtige Semantik zu sein. Aber Bayeux (injiziert über Spring) gibt null für getChannel ('/ test') zurück – mtyson
Ich aktualisierte die Antwort mit weiteren Details zur Verwendung Ihres Ansatzes ... – mtyson