超过jms Mule最大重新交付量

超过jms Mule最大重新交付量,jms,mule,hornetq,Jms,Mule,Hornetq,我有一个非常简单的设置,即MULE从HornetQ队列读取并将对象保存到数据库: 设置如下: <jms:connector name="connector.jms" maxRedelivery="1" connectionFactory-ref="hornetQConnectionFactory" doc:name="JMS" createMultipleTransactedReceivers="true" numberOfConcurrentTransac

我有一个非常简单的设置,即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>

为什么当maxRedelivery设置为1时,我会收到一条消息,消息已在端点上重新传递了9次?这到底是什么意思

HornetQ连接工厂:

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

任何帮助都将不胜感激

堆栈跟踪如下

ERROR 2012-10-19 01:04:07,283 [Thread-3013 (HornetQ-client-global-threads-1442093417)]: Message : "Message with id "ID:e6a0b303-1977-11e2-96d4-810571a3fe10" has been redelivered 9 times on endpoint "jms://adsLogQueue", which exceeds the maxRedelivery setting of 1 on the connector "connector.jms". Message payload is of type: HornetQObjectMessage Code : MULE_ERROR--2 Exception stack is: 1. "Message with id "ID:e6a0b303-1977-11e2-96d4-810571a3fe10" has been redelivered 9 times on endpoint "jms://adsLogQueue", which exceeds the maxRedelivery setting of 1 on the connector "connector.jms". Message payload is of type: HornetQObjectMessage (org.mule.transport.jms.redelivery.MessageRedeliveredException) org.mule.transport.jms.redelivery.JmsXRedeliveryHandler:91 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transport/jms/redelivery/MessageRedeliveredException.html) Root Exception stack trace: org.mule.transport.jms.redelivery.MessageRedeliveredException: "Message with id "ID:e6a0b303-1977-11e2-96d4-810571a3fe10" has been redelivered 9 times on endpoint "jms://adsLogQueue", which exceeds the maxRedelivery setting of 1 on the connector "connector.jms". Message payload is of type: HornetQObjectMessage at org.mule.transport.jms.redelivery.JmsXRedeliveryHandler.handleRedelivery(JmsXRedeliveryHandler.java:91) at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$JmsWorker.preProcessMessage(MultiConsumerJmsMessageReceiver.java:418) at org.mule.transport.AbstractReceiverWorker$1$1.process(AbstractReceiverWorker.java:120) + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) ******************************************************************************** 错误2012-10-19 01:04:07283[线程-3013(HornetQ-client-global-threads-1442093417)]: 消息:“id为”e6a0b303-1977-11e2-96d4-810571a3fe10“的消息已在端点上重新传递9次”jms://adsLogQueue,这超过了连接器“connector.jms”上的maxRedelivery设置1。消息负载的类型为:HornetQoObjectMessage 代码:MULE_错误--2 异常堆栈是: 1.“id为”e6a0b303-1977-11e2-96d4-810571a3fe10“的消息已在端点上重新传递9次”jms://adsLogQueue,这超过了连接器“connector.jms”上的maxRedelivery设置1。消息负载的类型为:HornetQoObjectMessage(org.mule.transport.jms.redelivery.MessageRedeliveredException) org.mule.transport.jms.redelivery.JmsXRedeliveryHandler:91(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transport/jms/redelivery/MessageRedeliveredException.html) 根异常堆栈跟踪: org.mule.transport.jms.redelivery.MessageRedeliveredException:“id为”e6a0b303-1977-11e2-96d4-810571a3fe10“的邮件已在端点上重新传递9次”jms://adsLogQueue,这超过了连接器“connector.jms”上的maxRedelivery设置1。消息负载的类型为:HornetQoObjectMessage 位于org.mule.transport.jms.redelivery.JmsXRedeliveryHandler.handleRedelivery(JmsXRedeliveryHandler.java:91) 在org.mule.transport.jms.MultiConsumerJmsMessageReceiver$JmsWorker.preProcessMessage(MultiConsumerJmsMessageReceiver.java:418) 位于org.mule.transport.AbstractReceiverWorker$1$1.process(AbstractReceiverWorker.java:120) +3个以上(为所有内容设置调试级别日志或“-Dmule.verbose.exceptions=true”) ********************************************************************************
首先要注意的是,Mule正在使用
JmsXRedeliveryHandler
,这意味着它检测到HornetQ支持
JMS_X_DELIVERY_COUNT
头并负责重新交付的计数。在这种情况下,Mule完全依赖HornetQ来提供准确的重新交付计数

引发此异常的事实意味着向Mule呈现的JMS消息的重新交付计数超过了JMS连接器上配置的计数(本例中为1)

由于您在事务中消费,很可能发生的情况是HornetQ将回滚,并在每次重新启动时一次又一次地向Mule表示此消息,除非您在HornetQ本身上配置了最大的重新交付计数


我的建议是:在Mule和HornetQ上设置相同的重新交付计数,或者在Mule上使用-1(无限制)并且完全依赖HornetQ的重新交付限制。

您也可以共享HornetQ连接工厂配置吗?@genjosanzo补充说,感谢您了解这一点,您有多个Mule实例连接到同一队列吗?@DavidDossot Hi是的,我有两个Mule实例连接到生产中的同一队列,尽管这也发生在我的lo上cal环境,其中只有一个mule连接到队列