4

HornetQ キューから読み取り、オブジェクトをデータベースに保存する MULE のセットアップは非常に簡単です。

以下の設定:

<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 回再配信されたというメッセージが表示されるのはなぜですか? 正確にはどういう意味ですか?

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 [スレッド 3013 (HornetQ クライアント グローバル スレッド 1442093417)]:

メッセージ : 「ID "ID:e6a0b303-1977-11e2-96d4-810571a3fe10" のメッセージは、エンドポイント "jms://adsLogQueue" で 9 回再配信されました。これは、コネクタ "connector.jms" の maxRedelivery 設定 1 を超えています。メッセージペイロードのタイプは HornetQObjectMessage です。
コード: MULE_ERROR--2

例外スタックは次のとおりです。
1.「ID「ID:e6a0b303-1977-11e2-96d4-810571a3fe10」のメッセージが、エンドポイント「jms://adsLogQueue」で 9 回再配信されました。これは、コネクタ「connector.jms」の maxRedelivery 設定 1 を超えています。メッセージペイロードのタイプは 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)

ルート例外スタック トレース:
org.mule.transport.jms.redelivery.MessageRedeliveredException: "ID が "ID:e6a0b303-1977-11e2-96d4-810571a3fe10" のメッセージが、エンドポイント "jms://adsLogQueue" で 9 回再配信されました。 1 コネクター「connector.jms」. メッセージペイロードのタイプ: HornetQObjectMessage
    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」を設定)
****************************************************** ******************************
4

1 に答える 1

6

最初に注意すべきことは、Mule が を使用していることですJmsXRedeliveryHandler。これは、HornetQ がJMS_X_DELIVERY_COUNTヘッダーをサポートし、再配信のカウントを処理することを検出したことを意味します。そのような状況では、Mule は HornetQ に完全に依存して再配信の正確な数を提供します。

この例外がスローされたという事実は、JMS コネクタで設定された回数 (この場合は 1) を超える再配信回数で JMS メッセージが Mule に提示されたことを意味します。

トランザクションで消費するため、HornetQ 自体に最大再配信カウントを設定していない限り、HornetQ は再起動のたびに何度もロールバックして Mule にこのメッセージを表示する可能性があります。

私のアドバイスは、Mule と HornetQ で同じ再配信カウントを設定するか、Mule で -1 (制限なし) を使用して、HornetQ の再配信制限に完全に依存することです。

于 2012-10-19T22:48:14.350 に答える