什么是Couchbase Environment autoreleaseAfter选项?

时间:2017-01-31 09:50:48

标签: java couchbase couchbase-view couchbase-java-api

在使用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();

有效设置自动释放问题解决了问题,但我不知道它是安全还是只是侧面解决问题。

CouchbaseEnvironment env = DefaultCouchbaseEnvironment
            .builder()
            .autoreleaseAfter(5000)
            .build();

我猜这种模式在查询后不会关闭连接,它会让它一直存在,直到达到超时(5秒)。

如果http调用结束(使用Spring MVC),它是否会“更早”关闭?似乎模式带来了危险,因为它可以容纳更多的连接,但它真的重要吗?

最后我觉得这个API的“正确”使用是通过rxjava Observable API,而大多数文档只显示了必要的例子。自动释放模式是否已过期(并将被弃用)或者它是否会在不久的将来得到支持?

1 个答案:

答案 0 :(得分:4)

在研究这个主题时,我发现了另一个案例here,Couchbase中出现了类似的错误。

default autoReleaseAfter()设置为2000毫秒。我想默认时间窗口不够长,您的订阅者订阅Observable会导致Observable的内容被自动释放以防止泄漏。在您的情况下,手动将其设置为5000毫秒足够长。不幸的是,我不知道它是否有任何副作用。

我很确定autoReleaseAfter()不会很快弃用。如果是这种情况,则会在Couchbase sourcedocs中注明(在页面末尾,搜索&#34;自动可观察资源发布时间段&#34;)。

我认为您应该将此错误报告给Couchbase开发人员。