【问题标题】:Unable to get Enyim.Caching MemcachedClient to work with Couchbase无法让 Enyim.Caching MemcachedClient 与 Couchbase 一起使用
【发布时间】:2012-10-01 16:40:52
【问题描述】:

我意识到 Couchbase 为他们的 memcached 服务器提供了一个客户端,但我正在尝试让 enyim.caching 客户端工作。

这是我使用 Couchbase 客户端(有效)的琐碎 c# 代码,然后与 enyim MemcachedClient 几乎相同:

class Program
{
    static void Main(string[] args)
    {
        var client = new CouchbaseClient();

        client.Store(StoreMode.Set, "somekey", "somevalue");

        var somevalue = client.Get<string>("somekey");

        Console.WriteLine(somevalue);
        Console.ReadLine();

        var mclient = new MemcachedClient();
        mclient.Store(StoreMode.Set, "Hello", "World");
        var myVal = mclient.Get<string>("Hello");
        Console.WriteLine(myVal);
        Console.ReadLine();
    }
}

这是我的 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
      <section name="couchbase" type="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/>
      <sectionGroup name="enyim.com">
        <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />      
      </sectionGroup>
    </configSections>
    <couchbase>
      <servers bucket="default" bucketPassword="myPassword">
        <add uri="http://127.0.0.1:8091/pools"/>
      </servers>
    </couchbase>
<enyim.com>
  <memcached>
    <servers>
      <add address="127.0.0.1" port="8091" />
    </servers>
    <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:10:00" deadTimeout="00:02:00" />
    <authentication type="Enyim.Caching.Memcached.PlainTextAuthenticator, Enyim.Caching" zone="" userName="Administrator" password="myPassword" />
  </memcached>
</enyim.com>
<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>  
</configuration>

当我单步执行代码时,Couchbase 客户端似乎工作正常。 Get 方法按预期返回“somevalue”。该代码还愉快地逐步执行了 MemcachedClient 代码,但是当我逐步执行 Store 方法时,它会挂起 10 秒(我认为那是超时),然后 myVal 值返回为 null。不会抛出任何错误。

我怀疑问题围绕配置中 memcached 的身份验证节点中的 zone 值。在 enyim.caching 源代码(从 Github 检索)中的 DemoApp 代码中,从未指定 zone,但如果未提供 zone,enyim 会抛出错误 - 即 DemoApp 无法按原样工作,因为 zone 不是t 提供。

我不确定这是否是问题所在,但我知道我不能将区域排除在外,但我不知道该值使用什么。我见过一个使用“AUTHZ”的例子,但这似乎没有任何区别。

有人看到我在这里做错了吗?任何帮助表示赞赏! :)

【问题讨论】:

    标签: memcached couchbase enyim enyim.caching


    【解决方案1】:

    好的 - 我知道发生了什么。我回到 Couchbase 控制台,发现我唯一的数据桶是 Couchbase 类型。因此,我创建了一个 Memcached 类型的新数据桶。我注意到这种存储桶类型不需要身份验证。我确实必须给它一个新的端口。

    一旦我对配置文件进行了最小的更改,enyim.caching MemcachedClient 代码就可以完美运行!

    这是我的新 enyim.caching 配置文件现在的样子:

    <enyim.com>
      <memcached>
        <servers>
          <add address="127.0.0.1" port="8095" />
        </servers>
        <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:10:00" deadTimeout="00:02:00" />
      </memcached>
    </enyim.com>
    

    我会尽快将此答案标记为解决方案。希望这可以帮助某人避免犯我愚蠢的错误。 :)

    更新:

    查看 cmets 以了解 John Zablocki 提供的另一种解决方案。谢谢约翰!

    【讨论】:

    • 另一种选择是保留 Couchbase 存储桶并将端口设置为 112211。使用 CouchbaseClient 仍然是推荐的方法,但如果您确实想要一个持久存储桶,这是一个选项。跨度>
    • 我不知道该怎么做,约翰。 Couchbase 存储桶的端口已设置为 112211(默认情况下)。我不确定如何设置我的配置文件以使用它...
    • 代码 sn-p 如下。 app.config 的设置也类似,但您可以将其设置为 11211,而不是像上面那样设置为 8095。var cfg = new MemcachedClientConfiguration(); cfg.AddServer("192.168.56.10", 11211); cfg.Protocol = MemcachedProtocol.Binary; var m = new MemcachedClient(cfg);
    • 太棒了!谢谢约翰!这就像一个魅力。它允许我获取并设置两个客户端的 Couchbase 存储桶!尼托!
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2018-01-02
    • 2016-11-14
    • 2015-02-01
    • 2019-05-10
    • 2017-11-20
    • 2011-05-24
    • 2019-05-17
    相关资源
    最近更新 更多