3

DefaultMessageListenerContainerにトランザクションを制御させるための手順はどうですか...私が読んだ限りでは、DMLCにsessionTransactedプロパティを提供するだけで済みます。私の目標は、エラーが発生した場合にメッセージをキューに戻すことです...

かなり長い間検索してきましたが、何も見つかりませんでした...

私のSpring-config(その一部):

<bean id="abstractMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer" abstract="true">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="maxConcurrentConsumers" value="5"/>
    <property name="receiveTimeout" value="10000" />
</bean>

<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer" parent="abstractMessageListenerContainer">
    <property name="destinationName" value="MY.QUEUE" />
    <property name="messageListener" ref="myMessageListener" />
            <property name="sessionTransacted" value="true" />
</bean>

<bean id="myMessageListener" class="my.package.structure.ListenerClass"></bean>

私のリスナークラス:

public class ListenerClass implements MessageListener {


    public void onMessage(Message msg) {


    }

}

チェックされていない例外(java.lang.IllegalStateExceptionなど)をスローするだけですか?

4

2 に答える 2

2

チェックされていない例外がスローされた場合、メッセージはロールバックされます。チェックされた例外は、MessageListenerインターフェースのonMessage-methodのmethod-signatureに記載されていないため、スローできません。

于 2012-10-27T14:28:51.213 に答える
-1

sessionTransactedリスナーで障害が発生した場合にtrueに設定すると、メッセージはロールバックされます。これは、基本的に、メッセージがキューに戻されて再試行されることを意味します。通常、ブローカーが許可する再試行回数には制限があり、しきい値を超えると、メッセージはDLQ(デッドレターキュー)に入れられます。

于 2012-10-23T19:39:08.237 に答える