solace - Solace - 当我收到“发送消息时出错 - 已关闭”时如何自动重新连接
问题描述
我的系统开始从 solace API 使用 (sol-jms-10.1.1.jar) 中抛出异常。重新启动应用程序后,问题就消失了。我怀疑 MQ 在一个周末进行了维护,然后连接发生了问题。
是否有任何设置可以用来自动断开断开的连接并重新连接以解决问题,而不必在这种情况下反弹应用程序?
javax.jms.IllegalStateException: Error sending message - already closed (Tried to perform operation on a closed XML message producer)
at sun.reflect.GeneratedConstructorAccessor677.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.solacesystems.jms.impl.JMSExceptionValue.newInstance(JMSExceptionValue.java:32)
at com.solacesystems.jms.impl.JCSMPExceptionMapper$ArrayListMapper.get(JCSMPExceptionMapper.java:31)
at com.solacesystems.jms.impl.JCSMPExceptionMapper.get(JCSMPExceptionMapper.java:94)
at com.solacesystems.jms.impl.Validator.createJMSException(Validator.java:572)
at com.solacesystems.jms.SolMessageProducer.sendMessage(SolMessageProducer.java:387)
at com.solacesystems.jms.SolMessageProducer.send(SolMessageProducer.java:199)
...
Caused by: com.solacesystems.jcsmp.StaleSessionException: Tried to perform operation on a closed XML message producer
at com.solacesystems.jcsmp.impl.JCSMPXMLMessageProducer.throwClosedException(JCSMPXMLMessageProducer.java:1434)
at com.solacesystems.jcsmp.impl.JCSMPXMLMessageProducer.createBytesXMLMessage(JCSMPXMLMessageProducer.java:1864)
at com.solacesystems.jcsmp.impl.JCSMPXMLMessageProducer.createXMLContentMessage(JCSMPXMLMessageProducer.java:1949)
at com.solacesystems.jms.impl.FlowMessageProducerAdapter.createXMLContentMessage(FlowMessageProducerAdapter.java:85)
at com.solacesystems.jms.encoding.DefaultJMSEncoder.encode(DefaultJMSEncoder.java:80)
at com.solacesystems.jms.SolMessageProducer.sendMessage(SolMessageProducer.java:377)
... 27 more
Caused by: com.solacesystems.jcsmp.JCSMPTransportException: (JCSMPTransportException) Error receiving data from underlying connection.
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel$ClientChannelReconnect.call(TcpClientChannel.java:2257)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 3 more
Caused by: ((Client name: myurl Local addr: ... Remote addr: ...) - ) com.solacesystems.jcsmp.JCSMPErrorResponseException: 403: Replication Is Standby [Subcode:56]
at com.solacesystems.jcsmp.protocol.impl.TcpChannel.executePostOnce(TcpChannel.java:228)
at com.solacesystems.jcsmp.protocol.impl.ChannelOpStrategyClient.performOpen(ChannelOpStrategyClient.java:90)
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel.performOpenSingle(TcpClientChannel.java:414)
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel.access$800(TcpClientChannel.java:104)
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel$ClientChannelReconnect.call(TcpClientChannel.java:2098)
... 4 more
解决方案
Solace API 能够在连接断开后自动重新连接。此行为由“重新连接重试”属性控制。
从异常中,应用程序已达到 Solace API 已放弃尝试重新连接的程度。现在由应用程序重新创建连接。
推荐阅读
- c++ - 是否可以在编译时强制两个派生类总是为覆盖函数返回不同的值?
- spring - 覆盖 KafkaAutoConfiguration 时出错
- bash - 用于 Windows 的 ubuntu 上的 Mosquitto mqtt
- c# - FluentValidation 使用 DB 检查重复值
- python - 循环遍历 Numpy ndarray 的所有样本
- ios - Xcode 函数中数组的 EXC_BAD_ACCESS
- powershell - 为什么`[SomeType] | Get-Member -Static 返回“SomeType”的静态成员而不是“System.RuntimeType”的静态成员?
- php - 使用 PHPMailer 形成表单
- angular - Angular:创建类对象并提供服务
- html - SVG:如何在 svg 上放置文本?