java - Solace JMS Consumer 重新连接后停止

标签 java jms spring-jms solace

我在我的项目中使用 solace 作为 JMS 提供程序。 我使用 spring CachingConnectionFactory 来检索连接。 在该连接上我创建新 session 。 我与在该 session 上创建的一个消费者有一个线程。

@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”(我检查过它是否有效)。

异常似乎很清楚。所以我的问题是: 当连接丢失并重新建立时如何处理这种情况/异常?消费者有可能复活吗?或者我应该创建新的消费者和新的线程(我想避免的)?

最佳答案

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

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

关于java - Solace JMS Consumer 重新连接后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50002724/

相关文章:

java - 没有 'org.springframework.jms.core.JmsTemplate' 类型的合格 bean

java - 您的 SQL 语法有误; ...在第 1 行的 '[C@f8d6792' 附近

java - 将 TableLayout 放入 ScrollView 中?

jakarta-ee - ActiveMQ 独立服务器部署或嵌入 Spring Webapp

java - 如何在 Spring boot 中动态地向 JMSListener Annotation 添加不同的目的地?

spring - Spring JMS ActiveMQ使用什么来确定代理何时应切换“排他消费者”?

java - 在 Spring JMS 消息中配置 JSON 输出

java - 为什么Java对不同括号的分数给出不同的答案

java - 为什么等待循环条件在多线程上下文中是安全的?

java - OPEN MQ - 异步帮助