首页 文章

由于“收到过期消息”而无法消耗来自ActiveMQ的消息

提问于
浏览
1

我在调试语句之下,我的消息监听器没有消耗任何消息 .

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 = false,consumerId = ID:CONSUM-1401814509338-1:1:1:1,destination = topic://Topic.ALL,message = ActiveMQTextMessage {commandId = 23284887,responseRequired = false,messageId = ID:PROC-1398663597609- 0:1:1:1:23284883,originalDestination = null,originalTransactionId = null,producerId = ID:PROC-1398663597609-0:1:1:1,destination = topic://Topic.ALL,transactionId = null,expiration = 1401814515925,timestamp = 1401814514925,arrival = 0,brokerInTime = 1401814514934,brokerOutTime = 1401814514934,correlationId = null,replyTo = null,persistent = false,type = null,priority = 4,groupID = null,groupSequence = 0,targetConsumerId = null, compressed = false,userID = null,content = org.apache.activemq.util.ByteSequence@2fec90f6,marshalledPropertie s = org.apache.activemq.util.ByteSequence@62a08837,dataStructure = null,redeliveryCounter = 0,size = 0,properties = {_ componentid = _EPSYNC_READWRITE,_attributename = networkAddress,_operation = Update,_oid = 51e8e5c3e4b0cc716bff43cc,type = NodeServer,eventtype = attribute,repository = qdb, userid = null},readOnlyProperties = true,readOnlyBody = true,droppable = false,jmsXGroupFirstForConsumer = false,text = {“ eventtype”:“attribute”,“ operation”:... kAddress“}] },redeliveryCounter = 0}


请在下面找到我的spring配置:

<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>

请帮我弄清楚我错过了什么..

1 回答

  • 5

    如果您的 生产环境 者发送的消息具有非常短的到期值,那么他们可能会在到达消费者之前到期 . 但是在很多情况下会出现这种错误,因为发送方和接收方上的时钟没有同步,所以当它真的不应该有消息时,消息似乎已经过期了 . 解决方案可能是确保您的计算机全部使用NTP进行同步 .

    还有另一种选择,应该同步时钟是不可能的,这是使用ActiveMQ TimeStampPlugin在发送它们之前更新传入消息的时间戳 .

相关问题