Spring Batch - не все записи обрабатываются из MQ поиска

Я довольно новичок в Spring и Spring Batch, поэтому не стесняйтесь задавать любые уточняющие вопросы, если они у вас есть.

Я вижу проблему с Spring Batch, которую не могу воссоздать в нашем тестовом или локальном окружении. У нас есть ежедневная работа, которая подключается к Websphere MQ через JMS и извлекает набор записей. В этом задании используется готовый JMS ItemReader. Мы реализуем наш собственный ItemProcessor, но он не делает ничего особенного, кроме логирования. Нет фильтров или обработки, которые должны влиять на входящие записи.

Проблема в том, что из 10000+ ежедневных записей в MQ только около 700 или около того (точное число каждый раз отличается) обычно регистрируются в ItemProcessor. Все записи успешно удалены из очереди. Количество регистрируемых записей каждый раз отличается и, похоже, не имеет шаблона. Сравнивая файлы журналов со списком записей в MQ, мы можем видеть, что, казалось бы, случайное подмножество записей «обрабатывается» нашей работой. Первая запись может быть выбрана, затем 50 пропущены, затем 5 подряд и т. Д. И шаблон каждый раз меняется при выполнении задания. Никаких исключений не регистрируется.

При запуске одного и того же приложения на локальном хосте и тестировании с использованием одного и того же набора данных все 10000+ записей успешно извлекаются и регистрируются ItemProcessor. Задание выполняется в рабочей среде от 20 до 40 секунд (также не постоянно), но в тестовом и локальном режимах это занимает несколько минут (что, очевидно, имеет смысл, поскольку обрабатывает намного больше записей).

Так что это одна из тех сложных проблем, которую нужно устранить, поскольку мы не можем ее воссоздать. Одна идея состоит в том, чтобы реализовать наш собственный ItemReader и добавить дополнительную запись в журнал, чтобы мы могли видеть, теряются ли записи перед читателем или после читателя - все, что мы теперь знаем, это то, что ItemProcessor обрабатывает только подмножество записей. Но даже это не решит нашу проблему, и это будет несколько своевременно, поскольку это даже не решение.

Кто-нибудь еще видел такую ​​проблему? Будем весьма благодарны за любые возможные идеи или предложения по устранению неполадок. Вот некоторые номера версий jar, которые мы используем для справки.

Весна - 3.0.5. ВЫПУСКSpring Integration - 2.0.3.RELEASEВесенняя партия - 2.1.7. РЕЛИЗАктивный MQ - 5.4.2Websphere MQ - 7.0.1

Спасибо заранее за ваш вклад.

РЕДАКТИРОВАТЬ: По запросу, код для процессора:

public SMSReminderRow process(Message message) throws Exception {

    SMSReminderRow retVal = new SMSReminderRow();
    LOGGER.debug("Converting JMS Message to ClaimNotification");
    ClaimNotification notification = createClaimNotificationFromMessage(message);

    retVal.setShortCode(BatchCommonUtils
            .parseShortCodeFromCorpEntCode(notification.getCorpEntCode()));
    retVal.setUuid(UUID.randomUUID().toString());
    retVal.setPhoneNumber(notification.getPhoneNumber());
    retVal.setMessageType(EventCode.SMS_CLAIMS_NOTIFY.toString());

    DCRContent content = tsContentHelper.getTSContent(Calendar
            .getInstance().getTime(),
            BatchCommonConstants.TS_TAG_CLAIMS_NOTIFY,
            BatchCommonConstants.TS_TAG_SMSTEXT_TYP);

    String claimsNotificationMessage = formatMessageToSend(content.getContent(),
            notification.getCorpEntCode());

    retVal.setMessageToSend(claimsNotificationMessage);
    retVal.setDateTimeToSend(TimeUtils
            .getGMTDateTimeStringForDate(new Date()));

    LOGGER.debug(
            "Finished processing claim notification for {}. Writing row to file.",
            notification.getPhoneNumber());
    return retVal;
}

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="claimsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jms/SMSClaimNotificationCF" />
    <property name="lookupOnStartup" value="true" />
    <property name="cache" value="true" />
    <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>

<bean id="jmsDestinationResolver"
    class="org.springframework.jms.support.destination.DynamicDestinationResolver">
</bean>

<bean id="jmsJndiDestResolver" 
    class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>  

<bean id="claimsJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="claimsQueueConnectionFactory" />
    <property name="defaultDestinationName" value="jms/SMSClaimNotificationQueue" />
    <property name="destinationResolver" ref="jmsJndiDestResolver" />
    <property name="pubSubDomain">
        <value>false</value>
    </property>
    <property name="receiveTimeout">
        <value>20000</value>
    </property>
</bean>

Ответы на вопрос(2)

Ваш ответ на вопрос