我们有一个庞大的系统,通过TIBCO EMS Messaging相互通信。 现在,其中一个服务在尝试连接到EMS服务器时不断抛出此异常:
TIBCO.EMS.IllegalStateException: connect failed: server in standby mode
但是,同一EMS服务器上的其他服务工作正常,没有任何异常。
我尝试通过创建一个控制台应用程序来重现这一点,该应用程序将使用相同的凭据连接到同一目标(队列)上的EMS服务器,但无法重现此错误。
EMS连接是容错的,可能已经故障转移到辅助服务器,但是,现在我看到主服务器已备份。
我还尝试仅连接到主服务器(我可以看到它正在运行),但它失败并出现相同的异常。
以下是堆栈跟踪供参考:
TIBCO.EMS.IllegalStateException: connect failed: server in standby mode
at TIBCO.EMS.CFImpl._CreateConnection(String userName, String password, Boolean xa)
at TIBCO.EMS.ConnectionFactory.CreateConnection(String userName, String password)
at Ems.makeConn()
我们在TIBCO.EMS.dll v. 8.1.0.10
上使用.NET 4.0
。
知道什么可能导致此异常?
答案 0 :(得分:1)
您的连接字符串是否只能提及FT / HA设置中的一个主机?这看起来就像您尝试仅连接到HA / FT主机之一时返回的错误消息,而不是当前活动的主机。
如果是这种情况,连接字符串将大多数的时间,但正确的 EMS HA连接字符串包括两个(或更多!)EMS主机和港口。只有一个同时处于活动状态。
通常看起来像这样:
serverUrl=tcp://server0:7222, tcp://server1:7344
请参阅此处的来源文档in TIBCO docs。
答案 1 :(得分:0)
结果发现我们用来检查服务器是否处于活动状态(我们没有服务器上的管理员权限)的工具行为不当(显示不正确的状态),因此这些服务器都没有真正活动(不是主要的也不是二次)。 服务器启动后,此错误消息就消失了。