在我们的生产环境中,我们面临着一个关于Tibco和Spring JMS的奇怪问题。随机地,在这一周内,我们的Spring JMS (Spring Boot2.5.2)的MessageListener实现不再从服务器接收消息,尽管队列有消息。但是,不会报告客户端断开连接错误,因此侦听器仍在侦听。
你有什么想法吗?Spring JMS是否具有无需服务器显式断开连接的“自动重新连接”机制?或者其他解决问题的想法?我们还使用了tibco-ems tibcrypt4.1jar和com.tibco.tibjms tibjms 8.0.0jar。
非常感谢,Adrien
发布于 2021-09-28 17:34:30
您在org.apache.camel.component.jms.JmsComponent上设置receiveTimeout了吗?此超时指定消息侦听器等待接收消息的时间。如果此超时到期,则消息侦听器将被删除并重新建立。
缺省值是1秒,这通常很低,因为这会导致在目的地上没有消息时频繁地断开连接和重新连接。
发布于 2021-10-08 16:46:39
对此行为的一种可能解释是在EMS客户端库中无法检测到的网络级别的连接丢失。
要管理这一点,您需要做两件事:
#1在内存服务器级别,在tibemsd.conf文件中添加以下属性:
client_heartbeat_server = 20
server_timeout_client_connection = 90
server_heartbeat_client = 20
client_timeout_server_connection = 90
这些属性启用了一些EMS机制,这些机制允许检测EMS服务器和客户端应用程序之间的连接丢失。
#2在您的应用程序级别,您应该在JVM参数中添加以下属性:
-Dcom.tibco.tibjms.connect.attempts 6,10000 -Dcom.tibco.tibjms.reconnect.attempts 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客户端库中可用的重新连接机制。
通过以上操作,您应该能够检测到连接丢失并自动重新连接。
https://stackoverflow.com/questions/69347501
复制相似问题