c# - 当 TIBCO EMS 服务器尝试故障转移时,客户端应该做什么?

标签 c# tibco tibco-ems ems

TIBCO EMS 用户指南(第 292 页)说:

The backup server will work indefinitely to either A) become the primary server or B) reconnect to the primary server. It also says clients may receive fail-over notification when the switch is successful (see also TIBCO EMS .NET reference pg 220).

我有一些关于这些事实的问题......

  1. 当服务器尝试故障转移/重新连接时,客户端会发生什么样的错误?

  2. 客户的适当回应是什么?

    • 从 ConnectionFactory 获取新的 Connection 对象直到一个有效?
    • 等待故障转移通知? (此时当前的 Connection 实例是否已修复?还是我需要获取一个新实例?)

我希望场景清晰,任何相关信息或建议也将不胜感激。

最佳答案

我至少可以回答上面的#1。

如果你启用了 Tibems.SetExceptionOnFTSwitch(true);并设置了一个异常处理程序来捕获服务器发送给客户端的消息,您将看到以下内容:

对于单服务器、非容错连接失败: “连接已终止”。

对于容错连接失败: “连接已执行容错切换到”

如果您尝试在连接断开时发布,则会抛出 TIBCO.EMS.IllegalStateException 以及“Producer is closed”消息。

对于上面的#2,我认为答案是让 EMS 库尽可能多地处理。一旦我们让 EMS 重新连接功能开始工作,它就会优雅地尝试重新连接,直到服务器再次可用,一旦重新连接,就好像从来没有问题一样。唯一的陷阱可能是您尝试在 ems 连接恢复之前发布消息。这是异常处理程序的用武之地,一旦通知您处于故障转移模式,您可以在发布者端调整异常处理以抑制错误,直到连接恢复。我不知道的是,当您用尽所有重新连接尝试时,您如何判断。

无论如何,在 EMS 方面,我们的两个世界似乎密切相关 - 希望我们的发现(基于您对我的问题的评论)对您有所帮助。

关于c# - 当 TIBCO EMS 服务器尝试故障转移时,客户端应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234782/

相关文章:

java - 从数据库中提取时间并在该特定时间发送消息

java - tibco ems 队列如何向发布者发送 SOAP 响应

c# - 获取文件扩展名(编辑)

c# - 如何在C#中动态调整文本框的大小

java - tibco 静态桥队列与静态持久队列

classnotfoundexception - Tibco 错误 : ClassNotFoundException: com. tibco.tibjms.naming.TibjmsInitialContextFactory

java - 删除 JMS 消息属性

c# - 使用 Azure 事件中心和 Azure 函数进行管道处理

c# - 将分离的实体添加到 EF 4.1 Code First 中的一对多关系

c# - 如何使用多个表创建 Spotfire 数据源