Tibco无法追踪的连接



在我们的生产环境中,我们面临Tibco和Spring JMS的一个奇怪问题。在一周内,我们的MessageListener实现的Spring JMS (Spring Boot 2.5.2)不再从服务器接收消息,尽管队列有消息。但是,没有报告客户端断开连接错误,因此侦听器仍在侦听。

你有主意吗?Spring JMS有"自动重新连接"功能吗?没有服务器明确断开连接的机制?或者其他解决问题的方法?我们还使用com.tibco.tibjms tibjms 8.0.0 jar和tibco-ems tibcrypt 4.1 jar。

非常感谢,阿德里安·

是否在org.apache.camel.component.jms.JmsComponent上设置了receiveTimeout?此超时指定消息侦听器等待接收消息的时间。如果此超时超时,则消息侦听器将被丢弃并重新建立。

默认值是1秒,这通常太低了,因为这会导致在目的地没有消息时频繁断开连接和重新连接。

对这种行为的一个可能的解释是网络级别的连通性丢失,而在EMS客户端库中无法检测到。

要做到这一点你需要做两件事:

在EMS服务器级别,在tibemss .conf文件中添加以下属性:

client_heartbeat_server = 20

server_timeout_client_connection = 90

server_heartbeat_client = 20

client_timeout_server_connection = 90

这些属性启用了一些EMS机制,这些机制允许检测EMS服务器和客户端应用程序之间的连接丢失。

在应用程序级别,您应该在JVM参数中添加以下属性:

-Dcom.tibco.tibjms.connect。尝试6,10000 - dcom .tibco.tibjms.重新连接。尝试12,10000

如果你正在使用连接工厂,你应该为你的应用程序使用的每个工厂添加以下属性:

addprop factory <YourFactory> url=tcp://<YourServer1>:7222,tcp://<YourServer2>:7222

addprop factory <YourFactory> connect_attempt_count=6

addprop factory <YourFactory> connect_attempt_delay=10000

addprop factory <YourFactory> connect_attempt_timeout=1000

addprop factory <YourFactory> reconnect_attempt_count=12

addprop factory <YourFactory> reconnect_attempt_delay=10000

addprop factory <YourFactory> reconnect_attempt_timeout=1000

这些属性控制EMS客户端库中可用的重连接机制。

使用以上方法,您应该能够检测连接丢失并自动重新连接。

最新更新