我对Couchbase很陌生,现在我正在努力重用与Couchbase Cluster和Bucket的连接。
我从Couchbase得到一个提示,说ClusterHelper是前进的方法: https://github.com/couchbase/couchbase-net-client/blob/master/Src/Couchbase/ClusterHelper.cs
CLusterHelper包含在我目前使用的最新CouchbaseNetClient v.2.2.0中。
我的Web.Config部分如下所示:
<script>
var p = $( "p:last" );
var offset = p.offset();
p.html( "left: " + offset.left + ", top: " + offset.top );
</script>
我可以在我的Web Api项目中调用Global.asax中的ClusterHelper.Initialize方法,如下所示:
<couchbaseClients>
<couchbase useSsl="false" operationLifespan="1000">
<servers>
<add uri="http://virdrivapp01:8091/pools"></add>
</servers>
<buckets>
<add name="default" useSsl="false" password="" operationLifespan="2000">
<connectionPool name="custom" maxSize="10" minSize="5" sendTimeout="12000"></connectionPool>
</add>
</buckets>
</couchbase>
</couchbaseClients>
变量_dataStoreClusterPointer只是我在Global.asax中用于测试的静态引用。由于我使用Autofac,我试图在ClusterHelper周围注册一个静态包装器作为单实例。
我也在Web API中切换到Autofac,如下所示:
ClusterHelper.Initialize("couchbaseClients/couchbase");
_dataStoreClusterPointer = ClusterHelper.Get();
ClusterHelper.GetBucket("default");
---结果?
我在Couchbase服务器中为每个请求获得了6个新连接。
---为什么它在我的Windows服务中工作呢?
这是一个奇怪的问题。我也使用Autofac和Quartz.NET来运行我的Windows服务。我使用完全相同的连接,我在主线程上的静态变量中持有指向ClusterHelper的指针。你猜怎么着?有用?所以无论我多少次使用连接,我只能获得6个连接。
---有没有人知道我做错了什么,或者我需要做什么才能使用Autofac和Web API重用Couchbase服务器连接?
答案 0 :(得分:1)
好吧,在与Couchbase交谈之后,当我在我的一个N1QL查询中对一个大文档进行完整索引扫描时,我似乎从服务器获得了新连接。
所以我的文件是约。 800 kB大小,当该文档是索引扫描的一部分时,无论是.NET,Javascript,CBQ.exe还是任何其他客户端,它都会触发新的连接打开。
因此,现在的解决方法是始终仅使用USE KEYS将查询范围限定为该文档。
更多关注......