我有两台运行的Tibco-Ems服务器,具有容错设置。 如果一台服务器不可用,则活动服务器切换到 故障转移服务器符合预期。
但是,我偶尔会遇到奇怪的错误。然后是新的 活动服务器说: "重新连接失败:对于id = XY"
,连接未知仅当我的客户端上存在打开的连接时才会发生这种情况。 但这就是我所期望的,连接也应切换到 新的活动服务器。 正如我所说,有时候它有效,有时却没有。
当我在客户端注册EMS-Exceptions时,出现错误: "无法从传输连接读取数据:远程主机强行关闭现有连接。"
堆栈跟踪: 在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小) at TIBCO.EMS.LinkTcp._readEx(Byte [] buffer,Int32 offset,Int32 size) 在TIBCO.EMS.LinkTcp._ReadWireMsg() 在TIBCO.EMS.LinkTcp.LinkReader.Work()
现在我不知道我能做什么。也许有人可以帮助我理解确切的问题是什么。 在此先感谢
更新 这里的最新更新: 即使我收到错误"重新连接失败"它按预期工作。第二台服务器将接管。
答案 0 :(得分:4)
以下是正在发生的事情...... EMS服务器跟踪它拥有的活动客户端连接,并在meta.db存储文件中保存有关这些连接的信息。在容错故障转移时,新的主EMS实例能够在客户端重新连接时通过将客户端提供的信息与存储在meta.db存储文件中的信息进行匹配来恢复客户端连接。
EMS清理尚未重新连接的客户端连接的时间点。该时间由tibemsd.conf配置文件中的ft_reconnect_timeout参数控制。此配置参数的默认设置为60秒。当EMS清理“过期”连接时,您可能会看到一条消息,指示它已“清除”EMS日志中的客户端连接,具体取决于您的日志记录设置。
在EMS服务器已经清除“过期”连接之后,有时客户端最终会尝试重新连接。如果网络分区阻止客户端成功重新连接到EMS服务器,直到EMS服务器清除连接之后,就会发生这种情况。发生这种情况时,您会看到“重新连接失败:连接未知...”消息。
当客户端由于此错误而无法“重新连接”时,它只是尝试将连接作为“新”连接。这有效,并且能够继续处理。
答案 1 :(得分:1)
我们遇到了同样的问题,我们的错误是存储(ems db)在活动和备用节点之间没有共享,因此当活动的ems失败时,新的活动ems无法恢复连接和消息。
答案 2 :(得分:0)
当您使用客户端FT而不是服务器级别FT时会发生这种情况,至少在我们遇到这个问题的情况下是这个问题。
如果您正在使用带有FT URL server1:port,server2:port的ems服务器,但服务器并非真正处于FT模式,当连接在这两个服务器之间切换时,您将遇到此问题,因为连接已移动由于FT设置不连贯,新的活动服务器无法销毁或获取故障服务器上的现有连接。
在服务器端的真正FT设置中,活动服务器自动假定这些连接处于活动状态并继续为它们提供服务。请验证服务器级别配置。
对我们来说,提供服务器级FT有助于解决这个问题。