Java-процесс с POJO, управляемыми Spring Message Driven, через некоторое время требовал перезапуска, чтобы получать сообщения из MQ

У меня есть процесс Java (1.7), который использует Spring MDP (Spring 4.2.3 JMS framework) для чтения и обработки сообщений из очередей Websphere MQ 8.1, которые работали без проблем в течение нескольких недель; но недавно перестал потреблять сообщения из очереди, пока она не была перезапущена (Java-процесс был запущен и не было никаких исключений / ошибок в журналах). Сообщения просто истекали из очереди после истечения времени ожидания, когда я столкнулся с проблемой. Тот факт, что мне пришлось перезапустить процесс, указывает на проблему где-то... так как я использую только фреймворк Spring, у меня нет никаких подсказок о том, что я могу сделать, чтобы устранить проблему / сузить проблему в случае, если это произойдет снова. Ценю любые предложения по внедрению некоторых диагностических мер.

Я заметил, что процесс java должен был выполнить несколько откатов сообщений обратно в очередь из-за проблемы тайм-аута сети при их обработке в день, когда я столкнулся с проблемой

Я приложил конфигурацию Spring MDP ниже

<!-- WebSphere MQ Connection Factory -->
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName">
        <value>${mq.wal.queue_hostname}</value>
    </property>
    <property name="port">
        <value>${mq.wal.queue_port}</value>
    </property>
    <property name="queueManager">
        <value>${mq.wal.queue_manager}</value>
    </property>
    <property name="transportType">
        <!-- BINDING MODE -->
        <value>${mq.wal.transport_type}</value>
    </property>
</bean>

<!-- JMS Queue Connection Factory -->
<bean id="jmsQueueConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory">
        <ref bean="mqConnectionFactory" />
    </property>
</bean>

<!-- IN queue -->
<bean id="in_queue" class="com.ibm.mq.jms.MQQueue"
    depends-on="jmsQueueConnectionFactory">
    <property name="baseQueueManagerName" value="${mq.queue_manager}" />
    <property name="baseQueueName" value="${mq.inqueue}" />
</bean>

<!--  Error handler -->
<bean id="messageErrorHandler" class="coop.mm.wallet.access.service.MessagingErrorHandler"></bean>
<!-- End error handler -->

<!-- Listener containers for INBOUND Queues -->
<!-- listener container -->
<bean id="listener_container"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsQueueConnectionFactory" />
    <property name="destination" ref="in_queue" />
    <property name="messageListener" ref="messageListener" />
    <property name="sessionTransacted" value="true" />
    <property name="concurrency" value="${listener_count}" />
    <property name="errorHandler" ref="messageErrorHandler"/>
</bean>

0 ответов

Другие вопросы по тегам