1

Ich verwende Spring Webflux, Spring Data und Project Reactor für nicht blockierende E/A (Spring Boot 2.0.0.M7).Reactive Stream auf finite Quelle bleibt offen für zukünftige Ereignisse

Mein Ziel ist es, eine Stock-Ticker-ähnliche API zu erstellen, die es einem Client erlaubt, alle Ressourcen von einem Endpunkt basierend auf bestimmten Kriterien anzufordern und neue Ressourcen zu erhalten, die nach der ersten Anfrage erstellt werden. Reactive MongoDB ist der Backing Store. Die grundlegende HandlerFunction Implementierung sieht wie folgt aus.

Mono<ServerResponse> getFoos(ServerRequest request) { 
    ok().contentType(TEXT_EVENT_STREAM) 
      .body(fooRepository.findAll(), Foo) 
} 

Offensichtlich ist dies kehrt nur alle Foos, die derzeit verfügbar sind, dann wird der Publisher schließt die Verbindung und keine neuen Foos werden an den Client gesendet. Meine Frage ist, welches Muster verwendet werden soll, um diesem einen unendlichen Stream hinzuzufügen, der neue Einträge akzeptieren kann.

  1. Concat mit einigen globalen Publisher Bean, die ich neue Foos zu schreiben, wie sie erstellt werden
  2. eine onComplete hinzufügen, die zur Repository resubscribes (mit einigen Kriterien doppelte Einträge filtern)
  3. Verwenden repeat und den Client lassen filtere die Duplikate
  4. Etwas anderes?

Antwort

1

Wenn Sie Ihre MongoDB Sammlung entsprechend konfigurieren (es hat mit einer Kappe bedeckt werden), können Sie tailable Cursor verwenden, um zu erreichen, was Sie wollen, nur eine @Tailable Anmerkung auf Ihrem Repository hinzuzufügen. Siehe die Spring Data MongoDB reference documentation about infinite streams.

+0

Nur eine Follow-up-Frage zu diesem Thema. Bedeutet das, dass wir eine separate Sammlung (Capped) erstellen müssen, damit dies funktioniert? – pvpkiran

+0

Die Sammlung muss in der Tat begrenzt werden. Das ist die Bedingung, um diese Funktion mit MongoDB zu haben. –

+0

Danke. Neu auch in MongoDB, und ich habe den Mongo-spezifischen Teil der Dokumentation nicht gelesen. – JudgingNotJudging

Verwandte Themen