【问题标题】:Set up a connection that times out for Apache Geode Client为 Apache Geode 客户端设置超时连接
【发布时间】:2021-03-25 02:16:25
【问题描述】:

我在 .NET Framework 上有一个 Windows 桌面应用程序,用户可以与之交互。有一个“连接”按钮,用于设置 Apache Geode 客户端到 Geode 服务器的连接。

当 Geode Server 关闭时(定位器 - 只有 1 个)桌面应用程序无限期挂起,需要强制关闭。

这就是我们连接到服务器并无限期挂在最后一行的方式:

                PoolFactory poolFactory = _cache.GetPoolManager()
                .CreateFactory()
                .SetSubscriptionEnabled(true)
                .AddLocator(_host, _port);

            return poolFactory.Create(_serviceName);

我想为这个方法添加一个超时时间来返回或抛出异常或任何东西。

或者,我已经将它包装在此之外的另一种计时器上以仅返回,但是当尝试再次运行上述代码(尝试再次连接应用程序)时,池仍在尝试连接。 我试图像这样摧毁它:

              //destroy the pool
            var poolManager = _cache.GetPoolManager();
            if (poolManager != null)
            {
                var pool = poolManager.Find(_serviceName);
                if (pool != null && pool.Destroyed == false)
                    pool.Destroy();
            }

但随后pool.Destroy(); 挂起无限

我怎样才能有一种机制来尝试连接到 Geode 服务器,如果在 10 秒内未连接,则返回,然后离开并能够使用相同的缓存再次尝试连接?

上面的注意是尝试重复使用相同的缓存,可能将缓存设置为 null 并重新尝试会起作用,但我正在寻找更正确的方法来做到这一点。

【问题讨论】:

    标签: geode


    【解决方案1】:

    取决于您使用的 .NET 本机客户端版本。 10.x connect-timeout 中有一个属性应该可以工作。此外,您可以将连接代码包装在 try{...}catch{} 块下并处理 Apache.Geode.Client.TimeoutException 和/或 ": No locators available" 的异常。

    例子:

        var _cache = new CacheFactory()
                            .Set("log-level", "config")
                            .Set("log-file", "C:\temp\test.log")
                            .Set("connect-timeout", "26000ms")
                            .Create();
    
        _cache.GetPoolManager()
            .CreateFactory()
            .SetSubscriptionEnabled(true)
            .AddLocator(hostname-or-ip", port-number)
            .Create("TestPool");
    

    【讨论】:

    • 感谢您的回复。我在本机客户端 10.x 上。缓存没有添加连接超时的方法。我正在尝试将它添加到我的第一个代码剪辑器所在的问题中。也许您还可以指向可以设置此设置的文档,因为我找不到任何有关连接超时的信息。
    • 好的,我已经用示例代码编辑了我的答案。希望有帮助。祝你好运。这是文档链接:gemfire-native-dotnet.docs.pivotal.io/102/…
    • "500ms" 用了 3,094ms 超时并且没有抛出任何异常,所以我检查了 Pool.Servers == null 是否相反。我相信我们使用的是 1.10.0 版本。再次感谢迪帕克
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2011-04-04
    • 2017-08-20
    • 1970-01-01
    • 2011-08-03
    • 2014-08-04
    相关资源
    最近更新 更多