Превышен максимальный срок доставки.

У меня очень простая настройка чтения MULE из очереди HornetQ и сохранения объекта в базу данных:

настройка ниже:

<jms:connector name="connector.jms" maxRedelivery="1" connectionFactory-ref="hornetQConnectionFactory" doc:name="JMS"
        createMultipleTransactedReceivers="true"
        numberOfConcurrentTransactedReceivers="100"
        acknowledgementMode="AUTO_ACKNOWLEDGE">
    <reconnect count="50" frequency="5000"/>       
</jms:connector>
<flow name="jmsListenerFlow1" doc:name="jmsListenerFlow1">
    <jms:inbound-endpoint queue="adsLogQueue" connector-ref="connector.jms" doc:name="JMS">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
    <component >
        <spring-object bean="logSaver"/>
    </component>

</flow>

Почему я получаю сообщение о том, что сообщение было доставлено 9 раз в конечную точку, а для параметра maxRedelivery установлено значение 1? Что это значит?

hornetQConnectionFactory:

        <bean name="hornetQTransportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
        <constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory"/>
        <constructor-arg>
            <map>
                <entry key="host" value="${jms.host}" /> 
                <entry key="port" value="${jms.port}" /> 
            </map>
        </constructor-arg>

    </bean>
    <bean name="hornetQConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
        <constructor-arg index="0" value="false"/>
        <constructor-arg index="1" ref="hornetQTransportConfiguration"/>
        <property name="minLargeMessageSize" value="250000"/>
        <property name="cacheLargeMessagesClient" value="false"/>
    </bean>

Любая помощь будет оценена!

След стека ниже.

ОШИБКА 2012-10-19 01:04:07,283 [Thread-3013 (HornetQ-client-global-threads-1442093417)]: Сообщение: "Сообщение с идентификатором"ID:e6a0b303-1977-11e2-96d4-810571a3fe10"было доставлено 9 раз на конечной точке "jms://adsLogQueue", что превышает значение maxRedelivery, равное 1 на соединителе "connector.jms". Полезная нагрузка сообщения имеет тип: HornetQObjectMessage Код: MULE_ERROR- 2 Стек исключений: 1. "Сообщение с Идентификатор "ID: e6a0b303-1977-11e2-96d4-810571a3fe10" был доставлен 9 раз в конечную точку "jms://adsLogQueue", что превышает значение maxRedelivery, равное 1 в соединителе "connector.jms". Полезные данные сообщения имеют тип: HornetQObjectMessage (org.mule.transport.jms.redelivery.MessageRedeliveredException)
  org.mule.transport.jms.redelivery.JmsXRedeliveryHandler:91 (http://www.mulesoft.org/docs/site/cur apidocs/org/mule/transport/jms/redelivery/MessageRedeliveredException.html) Трассировка стека корневых исключений: org.mule.transport.jms.redelivery.MessageRedeliveredException: "Сообщение с идентификатором" ID: e6a0b303-1977-11e2-96d4-81057aa было доставлено 9 раз в конечную точку "jms://adsLogQueue", что превышает значение maxRedelivery, равное 1 для соединителя "connector.jms". Полезная нагрузка сообщения имеет тип: HornetQObjectMessage в org.mule.transport.jms.redelivery.JmsXRedeliveryHandler.handleRedelivery(JmsXRedeliveryHandler.java:91) по адресу org.mule.transport.jms.MultiConsumerJmsMessageReceiver$JmsWorker.preProcessMessage(MultiConsumerJmsMessageReceiver.java:418) +Ware.jpg Еще 3 (установить ведение журнала уровня отладки или '-Dmule.verbose.exceptions=true'для всего)
********************************************************************************

1 ответ

Решение

Первое, что нужно отметить, это то, что Мул использует JmsXRedeliveryHandlerЭто означает, что он обнаружил, что HornetQ поддерживает JMS_X_DELIVERY_COUNT Заголовок и позаботится о подсчете повторных поставок. В этой ситуации Mule полностью полагается на HornetQ для точного подсчета повторных поставок.

Тот факт, что это исключение выдается, означает, что сообщение JMS было представлено Mule с числом повторных доставок, которое превышает число, сконфигурированное на соединителе JMS (1 в вашем случае).

Поскольку вы используете транзакцию, вероятно, что HornetQ будет откатывать и представлять это сообщение Mule при каждом перезапуске снова и снова, если вы не настроили максимальное число повторных поставок для самого HornetQ.

Мой совет: установите одинаковое количество повторных поставок для Mule и HornetQ или используйте -1 для Mule (без ограничений) и полностью полагайтесь на лимит повторных поставок HornetQ.

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