0

したがって、トピックからのメッセージを消費する定型コードがいくつかあります。

    public void onMessage(Message message )
{
    try
    {
        // try my conversion
    }
    catch(MyConversionException e)
    {
        //catch conversion error but still consume off topic
    }

    //Any other error i.e. runtime errors will not cause the message to be consumed from topic. So it can be retried

}

メッセージを別のオブジェクトに変換できるようにしたいと考えています。これによりエラーが発生した場合は、独自の例外処理でキャッチし、エラー キューに書き込みます。

私の質問は、Springs messageListenerContainer Bean をトランザクション対応に設定し、これが正常に行われた場合にのみ消費するにはどうすればよいですか?

[編集] これまでのBeanは次のとおりです。

    <!-- MESSAGE LISTENER CONTAINER -->
<bean id="ListenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="messageListener" ref="MessageListener" />
    <property name="connectionFactory" ref="Tcf" />
    <property name="destinationResolver" ref="JmsDestinationResolver" />
    <property name="receiveTimeout" value="${jms-timeout}" />
    <property name="destinationName" value="${jms-topic}" />
    <property name="concurrency" value="1" />
    <property name="pubSubDomain" value="true" />
    <property name="subscriptionDurable" value="${jms-durable-flag}"/>
    <property name="durableSubscriptionName" value="${jms-durable-name}" />
    <property name="clientId" value="${jms-client-id}"/>
</bean> 
4

1 に答える 1

-1

そうすることはお勧めしませんが、TransactionStatus.setRollbackOnly() を呼び出すことができます。

また、トランザクション モデルとの一貫性を考慮することもできます。ロールバックする場合は、例外を介して実行します...その場合...次の場合、Spring がメッセージをロールバックするように RuntimeException をスローする必要があります。例外をキャッチしてログに記録するだけで、Spring には何か問題が発生したという手がかりがありません...

于 2012-02-07T17:38:17.307 に答える