【问题标题】:org.springframework.jms.IllegalStateException: The Session is closedorg.springframework.jms.IllegalStateException:会话已关闭
【发布时间】:2019-09-11 09:31:40
【问题描述】:

我在我的 Spring Boot 应用程序中使用 Apache Camel 和 ActiveMQ。有时它会开始抛出会话关闭的错误。我必须重新启动应用程序才能消除此错误。

我浏览了一些文章,这些文章表明应用程序正在耗尽最大会话限制(默认 500)。下次发生此错误时,我将查看 activemq 面板以查看与连接对应的活动会话。

这是我的配置文件:

<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
        <contextScan/>
    </camelContext>

    <bean class="xy.acb.task.TaskServiceBean">
        <property name="camelContext" ref="camelContext"/>
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" destroy-method="shutdown">
        <property name="autoStartup" value="true"/>
        <property name="connectionFactory">
            <bean class="org.apache.activemq.pool.PooledConnectionFactoryBean">
                <property name="connectionFactory">
                    <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
                        <property name="brokerURL"
                                  value="${activemq.brokerURL:tcp://activemq:61616?daemon=true}"/>
                    </bean>
                </property>
            </bean>
        </property>
            <property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE"/>
        <property name="deliveryMode" value="1"/>
        <property name="timeToLive" value="1260000"/>
    </bean>

以下是错误跟踪:

The Session is closed; nested exception is javax.jms.IllegalStateException: The Session is closed
        ; nested exception is javax.jms.IllegalStateException: The Session is closed
        at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:279)
        at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169)
        at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:496)
        at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.send(JmsConfiguration.java:228)
        at org.apache.camel.component.jms.JmsProducer.doSend(JmsProducer.java:431)
        at org.apache.camel.component.jms.JmsProducer.processInOnly(JmsProducer.java:385)
        at org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:153)
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120)
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:416)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
        at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:51)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
        at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:74)
        at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:375)
        at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:343)
        at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:233)
        at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:343)
        at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:168)
        at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:119)
        at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:105)

【问题讨论】:

    标签: java spring apache-camel activemq


    【解决方案1】:

    从 Activemq 5.7 开始,maximumActive=500(默认)被替换为 maximumActiveSessionPerConnection 属性。默认连接数为 8。因此总共允许 500 * 8 = 4000 个会话。检查您使用的 Activemq 版本,然后设置您需要的正确属性以使其工作。

    【讨论】:

    • 我发现我们正在通过 cron 向 MongoDB 发送大量请求,而此时我们正面临“会话已关闭”问题。我们修复了 cron,现在它工作正常。
    猜你喜欢
    • 2010-11-29
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多