在使用了一些 Couchbase (2.4.1) 的 java 客户端 API 之后,我遇到了这个异常:
Error in scheduled task java.lang.IllegalStateException:
The Content of this Observable is already released.
Subscribe earlier or tune the CouchbaseEnvironment#autoreleaseAfter() setting.
我在命令模式下使用 ViewQuery,从结果中获取行时失败(ViewResult 是正确的,因为 totalRows() 和 success() 有很好的值)
ViewResult result = service.executeViewQuery(...);
List<ViewRow> rows = result.allRows();
有效设置 autoreleaseAfter 解决了问题,但我不知道它是否安全或只是回避问题。
CouchbaseEnvironment env = DefaultCouchbaseEnvironment
.builder()
.autoreleaseAfter(5000)
.build();
我猜这种模式不会在查询后关闭连接,它让它一直存在,直到达到超时(5 秒)。
如果 http 调用完成(使用 Spring MVC),它会自动“提前”关闭吗?似乎这种模式带来了危险,因为它可以容纳更多的连接,但这真的很重要吗?
最后,我觉得这个 API 的“正确”使用是通过 rxjava Observable API,而发现的大多数文档只显示了命令式示例。自动释放模式是否已过时(并且将被弃用)还是在不久的将来仍会受到支持?