jms - Tibco-Ems 故障转移问题

标签 jms tibco tibco-ems ems

我有 2 个正在运行的 Tibco-Ems 服务器,并且具有容错设置。 如果一台服务器不可用,则事件服务器切换到 故障转移服务器符合预期。

但是,我时不时会遇到奇怪的错误。然后新的 事件服务器说: “重新连接失败:id = XY 的连接未知”

只有当我的客户端上有打开的连接时才会发生这种情况。 但这正是我所期望的,连接也应该切换到 新的事件服务器。 正如我所说,有时有效,有时无效。

当我在客户端中注册 EMS-Exceptions 时,出现错误: “无法从传输连接读取数据:现有连接被远程主机强制关闭。”

堆栈跟踪: 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小) 在 TIBCO.EMS.LinkTcp._readEx(Byte[] 缓冲区,Int32 偏移量,Int32 大小) 在 TIBCO.EMS.LinkTcp._ReadWireMsg() 在 TIBCO.EMS.LinkTcp.LinkReader.Work()

现在我不知道我能做什么。也许有人可以帮助我了解确切的问题是什么。 提前致谢

更新: 这里有一个较晚的更新: 即使我收到错误“重新连接失败”,它仍按预期工作。第二个服务器将接管。

最佳答案

事情是这样的... EMS 服务器跟踪它所拥有的事件客户端连接,并将有关这些连接的信息保存在 meta.db 存储文件中。通过容错故障转移,新的主 EMS 实例能够在客户端重新连接时通过将客户端提供的信息与存储在 meta.db 存储文件中的信息相匹配来恢复客户端连接。

EMS 会在某个时间点清理尚未重新连接的客户端连接。该时间由 tibemsd.conf 配置文件中的 ft_reconnect_timeout 参数控制。此配置参数的默认设置为 60 秒。根据您的日志记录设置,当 EMS 清除“过期”连接时,您可能会在 EMS 日志中看到一条消息,表明它已“清除”客户端连接。

有时,在 EMS 服务器已清除“过期”连接后,客户端最终会尝试重新连接。如果网络分区阻止客户端在 EMS 服务器清理连接之前成功重新连接到 EMS 服务器,则可能会发生这种情况。发生这种情况时,您将看到“重新连接失败:连接未知...”消息。

当客户端由于此错误而无法“重新连接”时,它只会尝试将连接作为"new"连接。这有效并且能够继续处理。

关于jms - Tibco-Ems 故障转移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066117/

相关文章:

java - 具有不同消息选择器的持久订阅者

java - 尝试测试队列持久性。消费者断点时无法发送消息

javascript - 如何在html脚本中获取文档属性值

java - 使用 SSL java 客户端连接到 Tibco EMS

java - 在 OSX 上安装 HermesJMS 的问题

Azure服务总线AMQP异常

zeromq - 关于面向消息的中间件的图表/表格

linux - 用于调用主脚本的 Systemd 单元文件

java - 在 Tibco EMS 中创建 TopicSubscriber 期间出现异常

activemq - 商业消息中间件与开源的优势