Невозможно использовать сообщение из ActiveMQ из-за полученного сообщения с истекшим сроком действия

Я получаю ниже инструкцию отладки, и мой прослушиватель сообщений не использует никаких сообщений.

22:25:17.870 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG oaactivemq.ActiveMQMessageConsumer — ID: CONSUM-1401814509338-1:1:1:1 получено просроченное сообщение: MessageDispatch {commandId = 0, responseRequired = ложь, ConsumerId = ID: CONSUM-1401814509338-1: 1: 1: 1, назначение = тема: // Topic.ALL, сообщение = ActiveMQTextMessage {commandId = 23284887, responseRequired = ложь, messageId = ID: PROC-1398663597609-0 :1:1:1:23284883, originalDestination = null, originalTransactionId = null, productId = ID:PROC-1398663597609-0:1:1:1, назначение = тема://Topic.ALL, transactionId = null, истечение срока действия = 1401814515925 , временная метка = 1401814514925, прибытие = 0, brokerInTime = 1401814514934, brokerOutTime = 1401814514934, CorrelationId = null, responseTo = null, persistence = false, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, сжатый = false, userID = null, content = org.apache.activemq.util.ByteSequence@2fe c90f6, marshalledProperties = org.apache.activemq.util.ByteSequence@62a08837, dataStructure = null, redeliveryCounter = 0, size = 0, properties = {_componentid=_EPSYNC_READWRITE, _attributename=networkAddress, _operation=Update, _oid=51e8e5c3e4b0cc716bff44 , _eventtype=attribute, _repository=qdb, _userid=null}, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false, text = { "_eventtype": "attribute", "_operation":...kAddress" }]}}, счетчик повторной доставки = 0}


Пожалуйста, найдите мою весеннюю конфигурацию ниже:

<bean id="qConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>tcp://localhost:61616?wireFormat.maxInactivityDuration=0</value>
                </property>
            </bean>
        </property>
</bean>

<bean id="qMessageListener" class="com.xyz.listener.QManifestListener" />

<jms:listener-container destination-type="topic" 
        container-type="default" connection-factory="qConnectionFactory"
        acknowledge="auto" cache="auto">
        <jms:listener destination="Topic.ALL" ref="qMessageListener"
            method="onMessage" />
</jms:listener-container>

Пожалуйста, помогите мне понять, что мне не хватает..


person Jay    schedule 03.06.2014    source источник


Ответы (1)


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

Существует еще одна альтернатива, если синхронизация часов невозможна: использовать ActiveMQ TimeStampPlugin для обновления метка времени на входящих сообщениях перед их отправкой.

person Tim Bish    schedule 03.06.2014
comment
Спасибо большое Тим!! была задержка в 5 секунд с моим системным временем (поскольку оно указывало на другой ntp-сервер), после обновления с помощью общего ntp-сервера .. все работает нормально. - person Jay; 04.06.2014