重新连接

时间:2018-04-24 13:17:58

标签: java jms spring-jms solace

我在项目中使用安慰作为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"默认情况下(我检查它是否有效)。

异常似乎很清楚。所以我的问题是: 如何在连接丢失并再次建立时处理此类情况/异常?是否有可能让消费者再次活着?或者我应该创建新的消费者和新线程(我想避免的)?

2 个答案:

答案 0 :(得分:1)

reconnectOnException属性将在收到异常后尝试重新连接。由于故障转移仍在进行中,因此重新连接可能会失败。

您可以将Solace API配置为尝试使用"重新连接重试"重新连接多次。和"重新连接重试等待" JNDI连接工厂中的属性。这可以通过SolAdmin或CLI在Solace路由器上进行配置。如果将应用程序配置为重新连接足够长时间以建立连接,则不应遇到任何异常。否则,您将需要在收到此异常时再次创建会话和使用者。

答案 1 :(得分:0)

通常,CachingConnectionFactory可以通过Connection的onException()支持自动重新连接。但是,一旦连接重新连接,您也应该重新创建使用者。

您可以推荐/使用春天的DefaultMessageListenerContainerSimpleMessageListenerContainer,例如SimpleMessageListenerContainer

enter image description here