Nach einem wenig von der Java-Client-API von Couchbase mit (2.4.1) ich in diese Ausnahme lief:Was ist die Option "AutoBase Environment AutoreleaseAfter"?
Error in scheduled task java.lang.IllegalStateException:
The Content of this Observable is already released.
Subscribe earlier or tune the CouchbaseEnvironment#autoreleaseAfter() setting.
ich einen ViewQuery in imperativen Modus wurde verwenden, schlägt es, wenn die Zeilen aus dem Ergebnis zu erzielen (Viewresult ist die richtige totalRows() und Erfolg() haben schöne Werte)
ViewResult result = service.executeViewQuery(...);
List<ViewRow> rows = result.allRows();
effektiv Einrichtung autoreleaseAfter das Problem löst, aber ich weiß nicht, ob es sicher ist oder einfach nur nebenSchritt das Problem.
CouchbaseEnvironment env = DefaultCouchbaseEnvironment
.builder()
.autoreleaseAfter(5000)
.build();
Ich denke, dieser Modus nicht schließt die Verbindung nach einer Abfrage, es es zu leben, bis das Timeout läßt (5 Sekunden) erreicht wird.
Schließt es automatisch "früher", wenn der http-Aufruf beendet ist (mit Spring MVC)? Es scheint, dass der Modus Gefahr bringt, da er mehr Verbindungen halten kann, aber spielt es wirklich eine Rolle?
Schließlich denke ich, dass die "richtige" Verwendung dieser API ist, über Rxjava Observable API zu gehen, während die meisten der gefundenen Dokumentation nur imperative Beispiele zeigen. Ist der Autorelease-Modus veraltet (und wird veraltet) oder wird er in naher Zukunft noch unterstützt?
hey benjamin :) könnte es sein, dass mehr als 2s (default autorelease timeout) zwischen dem code-Aufruf "executeViewQuery" und dem Teil, wo 'result.allRows()' aufgerufen wird, vergehen? –
@ SimonBaslé hey Kumpel! :) Tatsächlich ist die Abfrage sehr schnell und die Berechnung zwischen den Diensten sollte nicht länger als 2 Sekunden dauern. Das Verschieben meines gesamten Codes in nur einen Spring-Dienst löst dieses Problem (der Dienst führt die Abfrage und das Parsen aus) und ich brauche kein erhöhtes Zeitlimit mehr. Vielleicht ruft man alle Methoden ViewResult.debug(), ViewResult.totalRows(), ViewResult.error(), ViewResult.success() in einen anderen Dienst auf, nachdem client.query (...) dieses Verhalten verursacht (die Verbindung vorzeitig schließen), I Ich weiß es nicht. – zenbeni