由于种种原因,我们现在才刚刚从Couchbase的(相当旧的)版本升级到最新版本。不幸的是,我们目前正在使用适用于.NET的Couchbase Client SDK的v1.1.6。迁移到v2.3.4似乎带来了许多重大变化,目前都围绕配置。
我们过去常常使用旧的CouchbaseClientConfiguration
类型,现在ClientConfiguration
(BucketConfiguration
和PoolConfiguration
)似乎已被取代。我已经设法迁移了大部分配置本身,但现在还不清楚的是超时。
用于连接的示例:
var clientConfiguration = new CouchbaseClientConfiguration()
{
Bucket = MembaseBucketName,
BucketPassword = MembaseBucketPassword
};
foreach (string host in root.Elements("servers").Elements("add").Attributes("uri"))
{
clientConfiguration.Servers.Add(new Uri(host));
}
// <servers retryCount="3" retryTimeout="00:00:30" >
clientConfiguration.RetryTimeout = TimeSpan.Parse(root.Element("servers").Attribute("retryTimeout").Value);
clientConfiguration.RetryCount = Convert.ToInt32(root.Element("servers").Attribute("retryCount").Value);
// <socketPool minPoolSize="10" maxPoolSize="10" connectionTimeout="00:00:30" deadTimeout="00:00:30" queueTimeout="00:00:30" receiveTimeout="00:00:30" />
clientConfiguration.SocketPool.MinPoolSize =
Convert.ToInt32(root.Element("socketPool").Attribute("minPoolSize").Value);
clientConfiguration.SocketPool.MaxPoolSize =
Convert.ToInt32(root.Element("socketPool").Attribute("maxPoolSize").Value);
clientConfiguration.SocketPool.ConnectionTimeout =
TimeSpan.Parse(root.Element("socketPool").Attribute("connectionTimeout").Value);
clientConfiguration.SocketPool.DeadTimeout =
TimeSpan.Parse(root.Element("socketPool").Attribute("deadTimeout").Value);
clientConfiguration.SocketPool.QueueTimeout =
TimeSpan.Parse(root.Element("socketPool").Attribute("queueTimeout").Value);
clientConfiguration.SocketPool.ReceiveTimeout =
TimeSpan.Parse(root.Element("socketPool").Attribute("receiveTimeout").Value);
这就是我到目前为止所设法翻译的内容:
var clientConfiguration = new ClientConfiguration
{
BucketConfigs = new Dictionary<string, BucketConfiguration>
{
{
MembaseBucketName,
new BucketConfiguration
{
BucketName = MembaseBucketName,
Password = MembaseBucketPassword,
Servers = root.Elements("servers").Elements("add").Attributes("uri").ToList(_ => new Uri(_.Value)),
PoolConfiguration = new PoolConfiguration
{
MinSize = Convert.ToInt32(root.Element("socketPool").Attribute("minPoolSize").Value),
MaxSize = Convert.ToInt32(root.Element("socketPool").Attribute("maxPoolSize").Value),
ConnectTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("connectionTimeout").Value).TotalMilliseconds,
WaitTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("queueTimeout").Value).TotalMilliseconds,
},
DefaultOperationLifespan = (uint)TimeSpan.Parse(root.Element("socketPool").Attribute("receiveTimeout").Value).TotalMilliseconds,
}
},
},
};
我们曾指定:QueueTimeout
,DeadTimeout
,ReceiveTimeout
,ConnectionTimeout
,RetryTimeout
和RetryCount
。这些迁移到哪里?我认为他们要么在新代码中具有相同的属性,要么围绕它们的概念发生了变化。
此外,Servers
和PoolConfiguration
配置在哪里?它们都在ClientConfiguration
和BucketConfiguration
上提供。我们只运行一个带有一些服务器URI的存储桶,因此总配置并不复杂。
答案 0 :(得分:2)
尽我所知,我以前很亲密。我最终得到的是:
var clientConfiguration = new ClientConfiguration
{
BucketConfigs = new Dictionary<string, BucketConfiguration>
{
{
MembaseBucketName,
new BucketConfiguration
{
BucketName = MembaseBucketName,
Password = MembaseBucketPassword,
Servers = root.Elements("servers").Elements("add").Attributes("uri").ToList(_ => new Uri(_.Value)),
PoolConfiguration = new PoolConfiguration
{
MinSize = Convert.ToInt32(root.Element("socketPool").Attribute("minPoolSize").Value),
MaxSize = Convert.ToInt32(root.Element("socketPool").Attribute("maxPoolSize").Value),
ConnectTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("connectionTimeout").Value).TotalMilliseconds,
WaitTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("queueTimeout").Value).TotalMilliseconds,
SendTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("receiveTimeout").Value).TotalMilliseconds,
},
DefaultOperationLifespan = (uint)TimeSpan.Parse(root.Element("socketPool").Attribute("receiveTimeout").Value).TotalMilliseconds, // Belt and braces.
}
},
},
ViewRequestTimeout = (int)TimeSpan.Parse(root.Element("socketPool").Attribute("receiveTimeout").Value).TotalMilliseconds, // Belt and braces.
};
似乎没有DeadTimeout
的等效内容,RetryCount
和RetryTimeout
也没有,archived docs中的内容适用于:{/ p>
retryCount
重试尝试读取群集配置失败的次数retryTimeout
(00:00:02)读取群集配置失败尝试之间等待的时间
在目前的文档中,我找不到类似的内容。
ReceiveTimeout
似乎与一些事情有关,即PoolConfiguration.WaitTimeout
,BucketConfiguration.DefaultOperationLifespan
和ClientConfiguration.ViewRequestTimeout
。我对此最不自信,因为它是一个配置映射到三个似乎有类似行为的新配置选项。
其余几乎是一对一的。
忽略奇怪的(int)TimeSpan.TotalMilliseconds
废话,它是我们指定配置的当前方式的回归。它将来需要改变。
当我根据上述方法验证我的假设时,我将重新审视这个答案。我仍然没有弄清楚为什么相同的配置在多个级别 - 我希望你可以默认然后覆盖值。