TIBCO.EMS.IllegalStateException:连接失败:服务器处于待机模式

TIBCO.EMS.IllegalStateException: connect failed: server in standby mode

我们有一个大系统,其中有大量服务通过 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()

我们在 .NET 4.0 上使用 TIBCO.EMS.dll v. 8.1.0.10

知道什么会导致此异常吗?

您的连接字符串能否仅提及 FT/HA 设置中的其中一台主机?这看起来像是您尝试仅连接到 HA/FT 主机之一而不是当前活动的主机时返回的错误消息。

如果是这样,连接字符串将在 大多数 的时间工作,但是 适当的 EMS HA 连接字符串包括两个(或更多!)EMS 主机和端口。同时只有一个活动。

通常看起来像这样:

serverUrl=tcp://server0:7222, tcp://server1:7344

在此处查看源文档 in TIBCO docs

原来我们用来检查服务器是否处于活动状态的工具(我们在服务器上没有管理员权限)行为不端(显示不正确的状态),所以 none 这些服务器确实处于活动状态(不是主要的也不是次要的)。 服务器一启动,此错误消息就消失了。