我们有一台运行我们的 c# windows 服务的应用程序服务器和一台运行 TIBCO EMS 的服务器。两台服务器将在一周内的不同时间重新启动。
当应用程序服务器首先重新上线时,我们喜欢 c#windwos 服务不断尝试连接到 EMS 服务器,直到 EMS 服务器重新上线。(我有重试逻辑适用于这种情况)
当 EMS 服务器在应用程序服务器运行时脱机时(例如,c# 中的 EMS 客户端正在侦听队列中的传入消息),这种情况下执行重试逻辑的最佳方法是什么?会立即抛出异常吗?
谢谢
如何获得连接关闭的通知?我看到连接对象有异常列表器和异常处理程序。但是如果我在它们都运行时关闭网卡,我无法在 c# 中捕获它们中的任何一个。
它们之间有什么区别?
如果您Windows Service
只是为了连接,TIBCO EMS
那么您可以添加一个依赖项。然后,每当TIBCO EMS
服务停止/重新启动时,您Windows Service
将分别停止/重新启动。缺点是当你开始时TIBCO EMS
,你Windows Service
不会自动开始(我不确定你是否可以将两个服务配对在一起来克服这个问题)。
否则,您可以将 .NET 中的计时器类之一(例如System.Timers.Timer)添加到处理与 TIBCO EMS 的连接的类中。然后在连接关闭时启动计时器并在连接打开后停止它。定时器可以在指定的时间间隔后尝试连接。
您应该尝试将以下 KB 中的属性添加到您的 tibemsd.conf 并检查。
https://support.tibco.com/s/article/Tibco-KnowledgeArticle-Article-33918
例如:
client_heartbeat_server=10
client_timeout_server_connection=35
server_heartbeat_client=10
server_timeout_client_connection=35