Meine Anwendung verfügt über eine Akka-Websocket-Schnittstelle. Der Web-Socket besteht aus einem Actor-Subscriber und einem Actor-Publisher. Der Abonnent behandelt Befehle, indem er sie an den entsprechenden Akteur sendet. Der Publisher hört den Event-Stream ab und veröffentlicht Update-Informationen zurück zum Stream (und schließlich zum Client). Das funktioniert gut.So senden Sie eine Nachricht in einem reaktiven Stream von einem Abonnenten an einen Publisher in einer Web-Socket-Verbindung
Meine Frage: Wie ist es für den Abonnenten möglich, ein Ereignis zurück an den Stream zu senden? Zum Beispiel, um die Ausführung eines empfangenen Befehls zu bestätigen.
public class WebSocketApp extends HttpApp {
private static final Gson gson = new Gson();
@Override
public Route createRoute() {
return get(
path("metrics").route(handleWebSocketMessages(metrics()))
);
}
private Flow<Message, Message, ?> metrics() {
Sink<Message, ActorRef> metricsSink = Sink.actorSubscriber(WebSocketCommandSubscriber.props());
Source<Message, ActorRef> metricsSource =
Source.actorPublisher(WebSocketDataPublisherActor.props())
.map((measurementData) -> TextMessage.create(gson.toJson(measurementData)));
return Flow.fromSinkAndSource(metricsSink, metricsSource);
}
}
Eine schöne Lösung könnte sein, dass der zeichn Schauspieler (die WebSocketCommandSubscriber
Schauspieler im Code oben) eine Nachricht zurück an den Strom wie sender().tell(...)
... No