Spring: потребительские сеансы / соединения JMS не удаляются в Message Broker после завершения пакетного задания

1

У меня есть пакетное задание, настроенное для чтения сообщений из JMS Destination и записи в файл XML с помощью Chuck Tasklet. Считыватель JMS выполнен на заказ, который inturn вызывает метод приема JMSTemplate. Я использую webMethods Broker как JMS Broker. Во время пакетного запуска мы заметили, что сеанс пользователя, созданный при чтении сообщений из пункта "Брокер", не будет уничтожен по завершении партии. Они уничтожаются только после того, как я отключил JVM. Я привел более подробную информацию ниже,

Конфигурация JMS Spring XML:

<bean id="JMS.SourceQueue.JndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <map>
            <entry key="java.naming.provider.url" value="wmjmsnaming://Broker #[email protected]:6849" />
            <entry key="java.naming.factory.initial" value="com.webmethods.jms.naming.WmJmsNamingCtxFactory" />
            <entry key="com.webmethods.jms.naming.clientgroup" value="IS-JMS" />
        </map>
    </property>
</bean>
<bean id="JMS.SourceQueue.JmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="JMS.SourceQueue.JndiTemplate" />
    <property name="jndiName" value="SmartBatchConnectionFactory" />
    <property name="lookupOnStartup" value="true" />
    <property name="cache" value="false" />
    <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>
<bean id="JMS.SourceQueue.ConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="JMS.SourceQueue.JmsConnectionFactory" />
</bean>
<bean id="JMS.SourceQueue.DefaultDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="JMS.SourceQueue.JndiTemplate" />
    <property name="jndiName" value="SourceQueue" />
</bean>
<bean id="JMS.SourceQueue.MessageTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="JMS.SourceQueue.ConnectionFactory" />
    <property name="receiveTimeout" value="10000" />
    <property name="sessionTransacted" value="true" />
    <property name="defaultDestination" ref="JMS.SourceQueue.DefaultDestination" />
</bean>

Любая помощь в том, чтобы указывать на актуальную проблему, была бы замечательной.

Теги:
spring-integration
spring-jms
jmstemplate
webmethods

1 ответ

0

Вызов destroy() в JMS.SourceQueue.ConnectionFactory в конце последнего step (или иначе, когда задание завершено).

Использование фабрики кэширующих подключений рекомендуется избегать создания подключений/потребителей для каждого сообщения, но нужно сказать, когда физически освобождать ресурсы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню