当前位置:  开发笔记 > 编程语言 > 正文

TIBCO EMS故障转移重新连接C#(TIBCO.EMS.dll)

如何解决《TIBCOEMS故障转移重新连接C#(TIBCO.EMS.dll)》经验,为你挑选了2个好方法。

我们有一个TIBCO EMS解决方案,它在2-4服务器环境中使用内置服务器故障转移.如果TIBCO管理员将故障转移服务从一个EMS服务器转移到另一个EMS服务器,则应该在EMS服务级别自动将连接转移到新服务器.对于使用EMS服务的C#应用​​程序,这种情况不会发生 - 我们的用户连接在故障转移后没有转移到新服务器,我们不确定原因.

我们的应用程序仅在启动时连接到EMS,因此如果TIBCO管理员在用户启动应用程序后进行故障转移,则用户需要重新启动应用程序才能重新连接到新服务器(我们的EMS连接使用包含所有4个生产EMS服务器的服务器字符串 - 如果第一次尝试失败,它将移动到字符串中的下一个服务器并再次尝试).

我正在寻找一种自动化方法,如果检测到连接已经死亡,我会定期尝试重新连接到EMS,但我不确定如何最好地做到这一点.

有任何想法吗?我们正在使用TIBCO.EMS.dll版本4.4.2和.Net 2.x(SmartClient应用程序)

任何帮助,将不胜感激.



1> ScottCher..:

首先,是的,我正在回答我自己的问题.然而,重要的是要注意,如果没有ajmastrean,我将无处可去.非常感谢!

ONE:ConnectionFactory.SetReconnAttemptCount,SetReconnAttemptDelay,SetReconnAttemptTimeout应该适当设置.我认为默认值重复得太快(重试之间的1/2秒).由于网络存储等原因,我们的EMS服务器可能需要很长时间才能进行故障转移 - 因此,以1/2间隔进行5次重试远远不够.

TWO:我认为启用客户端 - 服务器和服务器 - 客户端心跳非常重要.无法验证但是如果没有这些,客户端可能无法获得服务器脱机或切换到故障转移模式的通知.当然,这是EMS的服务器端设置.

三:您可以通过设置Tibems.SetExceptionOnFTSwitch(true)来监视故障转移事件; 然后连接异常事件处理程序.在单服务器环境中,您将看到"已终止连接"消息.但是,如果您处于容错多服务器环境中,您将看到:"连接已执行容错切换到".您并不严格需要此通知,但它可能很有用(特别是在测试中).

四:显然在EMS文档中不清楚,连接重新连接在单服务器环境中不起作用.您需要处于多服务器,容错环境中.然而,有一个技巧.您可以将相同的服务器放在连接列表中两次 - 我知道这很奇怪,但是它可以工作并且它使内置的重新连接逻辑能够工作.

一些代码:

private void initEMS()
{
    Tibems.SetExceptionOnFTSwitch(true);
    _ConnectionFactory = new TIBCO.EMS.TopicConnectionFactory();
    _ConnectionFactory.SetReconnAttemptCount(30);       // 30retries
    _ConnectionFactory.SetReconnAttemptDelay(120000);   // 2minutes
    _ConnectionFactory.SetReconnAttemptTimeout(2000);   // 2seconds
_Connection = _ConnectionFactory.CreateTopicConnectionM(, );
    _Connection.ExceptionHandler += new EMSExceptionHandler(_Connection_ExceptionHandler);
}
private void _Connection_ExceptionHandler(object sender, EMSExceptionEventArgs args)
{
    EMSException e = args.Exception;
    // args.Exception = "Connection has been terminated" -- single server failure
    // args.Exception = "Connection has performed fault-tolerant switch to " -- fault-tolerant multi-server
    MessageBox.Show(e.ToString());
}



2> Anthony Mast..:

这篇文章应该总结我目前的评论并更详细地解释我的方法......

TIBCO的"ConnectionFactory"和"Connection"类型是重量级的,线程安全的类型.TIBCO建议您保持使用一个 ConnectionFactory(每个服务器配置的工厂)和每个工厂一个 Connection.

服务器似乎还负责就地"连接"故障转移和重新连接,所以让我们确认它正在完成其工作,然后依靠该功能.

与修复服务器或客户端设置问题相比,创建客户端解决方案会稍微复杂一些.您需要重新创建从失败的连接创建的所有会话(更不用说生产者,消费者和目的地).两种类型都没有"重新连接"或"刷新"方法.会话也不保持对其父连接的引用.

您将不得不管理连接/会话对象的查找,并坚持重新初始化每个人!或实现某种会话失败事件处理程序,可以获取新连接并重新连接它们.

因此,现在,让我们深入了解客户端是否设置为接收故障转移通知(tib ems用户指南第292页).并确保捕获引发的异常,包含故障转移URL,并且正在正确处理.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有