JMS Connection不断在我们的Oracle队列中“关闭会话”

时间:2018-11-20 12:25:18

标签: spring-boot spring-integration oracle-aq

我们正在使用Spring Boot来运行我们的队列轮询程序。

大约每2分钟轮询一次队列,每2分钟关闭会话,然后刷新一次。

该连接是来自外部tomcat的共享连接,此连接与其他十二个应用程序共享。

    2018-11-20 11:59:21.263 WARN [serviceRequestAdapter.container-3] org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'NPP.SERVICE_REQUEST' - 
      trying to recover. Cause: JMS-131: Session is closed
    2018-11-20 11:59:21.265 INFO [serviceRequestAdapter.container-3] org.springframework.jms.listener.DefaultMessageListenerContainer - 
      Successfully refreshed JMS Connection
    2018-11-20 12:01:21.781 WARN [serviceRequestAdapter.container-4] org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'NPP.SERVICE_REQUEST' - 
      trying to recover. Cause: JMS-131: Session is closed
    2018-11-20 12:01:21.823 INFO [serviceRequestAdapter.container-4] org.springframework.jms.listener.DefaultMessageListenerContainer - 
      Successfully refreshed JMS Connection

实际上,这似乎并没有影响功能,因为发布的消息已被消耗和处理。

这实际上是一个问题,如果可以的话,我该如何解决?

如果没有问题,如何隐藏这些消息而又不会将日志级别降低为错误?

我们的jms-context.xml

    <context:annotation-config/>

    <tx:annotation-driven/>

    <int:message-history/>

    <int:channel id="jms-inbound"/>
    <int:channel id="voucher-create-inbound"/>
    <int:channel id="voucher-update-inbound"/>
    <int:channel id="default-inbound"/>

    <orcl:aq-jms-connection-factory id="connectionFactory"
                                    connection-factory-type="QUEUE_CONNECTION"
                                    use-local-data-source-transaction="true"/>

    <int:recipient-list-router input-channel="jms-inbound" default-output-channel="default-inbound"
                               id="action-type-router">
        <int:recipient channel="voucher-create-inbound"
                       selector-expression="headers.actionType == 'CREATE VOUCHER'"/>
        <int:recipient channel="voucher-update-inbound"
                       selector-expression="headers.actionType == 'UPDATE VOUCHER'"/>
    </int:recipient-list-router>

    <int-jms:message-driven-channel-adapter
            id="serviceRequestAdapter"
            channel="jms-inbound"
            cache-level="3"
            connection-factory="connectionFactory"
            destination-name="${oracle.rqst-q-name}"/>

    <int:service-activator id="createVoucherActivator"
                           input-channel="voucher-create-inbound"
                           requires-reply="false"
                           method="onMessage">
        <beans:bean class="VoucherRequestConsumer"/>
    </int:service-activator>

    <int:service-activator id="updateVoucherActivator"
                           input-channel="voucher-update-inbound"
                           requires-reply="false"
                           method="onMessage">
        <beans:bean class="VoucherRequestConsumer"/>
    </int:service-activator>

    <beans:bean id="defaultRequestConsumer"
                class="DefaultRequestConsumer"/>
    <int:service-activator id="defaultActivator"
                           input-channel="default-inbound"
                           requires-reply="false"
                           ref="defaultRequestConsumer"
                           method="onMessage">
    </int:service-activator>
</beans:beans>

1 个答案:

答案 0 :(得分:1)

我有点困惑。 。 。你在问什么?我的意思是我看不到任何问题。 您是否只是在想确认没问题?

无论如何,请考虑本文档-https://docs.spring.io/spring-data/jdbc/old-docs/2.0.0.M1/reference/html/orcl.streamsaq.html,特别是第4.3节,将连接工厂配置为使用与数据访问代码相同的本地事务。具体讨论对JMS的影响将use-local-data-source-transaction设置为true时的会话。