我在项目中使用安慰作为JMS提供程序。 我使用spring CachingConnectionFactory来检索Connection。 在那个连接上我创建了新会话。 我在该会话中创建了一个使用者的线程。
@Autowired
CachingConnectionFactory ccf;
Connection connection = ccf.createConnection();
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
MessageConsumer messageConsumer = new session.createConsumer(destination); // This is passed to new thread
我正在进行一些故障转移测试。当我从网络连接中拔出服务器时,它会失败。当我再次连接服务器时,我仍然收到相同的例外:
javax.jms.IllegalStateException: Error receiving message - already closed (Tried to call receive on a stopped message consumer.) ...
更多CachingConnectionFactory有" reconnectOnException"属性设置为" true"默认情况下(我检查它是否有效)。
异常似乎很清楚。所以我的问题是: 如何在连接丢失并再次建立时处理此类情况/异常?是否有可能让消费者再次活着?或者我应该创建新的消费者和新线程(我想避免的)?
答案 0 :(得分:1)
reconnectOnException属性将在收到异常后尝试重新连接。由于故障转移仍在进行中,因此重新连接可能会失败。
您可以将Solace API配置为尝试使用"重新连接重试"重新连接多次。和"重新连接重试等待" JNDI连接工厂中的属性。这可以通过SolAdmin或CLI在Solace路由器上进行配置。如果将应用程序配置为重新连接足够长时间以建立连接,则不应遇到任何异常。否则,您将需要在收到此异常时再次创建会话和使用者。
答案 1 :(得分:0)