我在 .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.xconnect-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");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句