微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 Apache Geode Client 设置超时的连接

如何解决为 Apache Geode Client 设置超时的连接

我在 .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(); 挂起 indefinateley

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

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

解决方法

取决于您使用的 .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");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。