3

进展如何,让 DefaultMessageListenerContainer 控制事务...据我所知,我只需向 DMLC 提供 sessionTransacted-property。我的目标是将消息放回队列,如果发生一些错误......

已经找了好久,但没有找到任何东西......

我的 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 方法的方法签名中没有提及它们。

于 2012-10-27T14:28:51.213 回答
-1

您对 的假设是正确的sessionTransacted,如果设置为 true 以防侦听器发生任何故障,则消息将回滚 - 这基本上意味着消息将返回队列中进行重试。通常,代理允许的重试次数是有限制的,如果超过阈值,消息将最终进入 DLQ(死信队列)。

于 2012-10-23T19:39:08.237 回答