从SDK

时间:2016-07-26 09:31:21

标签: c# couchbase

由于种种原因,我们现在才刚刚从Couchbase的(相当旧的)版本升级到最新版本。不幸的是,我们目前正在使用适用于.NET的Couchbase Client SDK的v1.1.6。迁移到v2.3.4似乎带来了许多重大变化,目前都围绕配置。

我们过去常常使用旧的CouchbaseClientConfiguration类型,现在ClientConfigurationBucketConfigurationPoolConfiguration)似乎已被取代。我已经设法迁移了大部分配置本身,但现在还不清楚的是超时。

用于连接的示例:

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,
            }
        },
    },
};

我们曾指定:QueueTimeoutDeadTimeoutReceiveTimeoutConnectionTimeoutRetryTimeoutRetryCount。这些迁移到哪里?我认为他们要么在新代码中具有相同的属性,要么围绕它们的概念发生了变化。

此外,ServersPoolConfiguration配置在哪里?它们都在ClientConfigurationBucketConfiguration上提供。我们只运行一个带有一些服务器URI的存储桶,因此总配置并不复杂。

1 个答案:

答案 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的等效内容,RetryCountRetryTimeout也没有,archived docs中的内容适用于:{/ p>

  
      
  • retryCount重试尝试读取群集配置失败的次数
  •   
  • retryTimeout(00:00:02)读取群集配置失败尝试之间等待的时间
  •   

在目前的文档中,我找不到类似的内容。

ReceiveTimeout似乎与一些事情有关,即PoolConfiguration.WaitTimeoutBucketConfiguration.DefaultOperationLifespanClientConfiguration.ViewRequestTimeout。我对此最不自信,因为它是一个配置映射到三个似乎有类似行为的新配置选项。

其余几乎是一对一的。

忽略奇怪的(int)TimeSpan.TotalMilliseconds废话,它是我们指定配置的当前方式的回归。它将来需要改变。

当我根据上述方法验证我的假设时,我将重新审视这个答案。我仍然没有弄清楚为什么相同的配置在多个级别 - 我希望你可以默认然后覆盖值。