0

我必须分析下面给出的一段弹簧集成代码:

<int:channel id="errorChannel" />

<int:exception-type-router input-channel="errorChannel"
    default-output-channel="otherError">

    <int:mapping
        exception-type="MessageRejectedException"
        channel="mreError" />
</int:exception-type-router>


 <int:channel id="otherError" />
<int:transformer input-channel="otherError"
    ref="otherExceptionTransformer" output-channel="errors" />
<bean id="otherExceptionTransformer"
    class="OtherExceptionTransformer">
</bean>

<int:channel id="mreError" />
<int:transformer input-channel="mreError"
    ref="mreExceptionTransformer" output-channel="errors" />
<bean id="mreExceptionTransformer"
    class="MessageRejectedExceptionTransformer">
</bean>

<int:channel id="errors"/>

<int-jms:outbound-channel-adapter channel="errors"
        connection-factory="connectionFactory" destination-      
                          name="${myQueue.inbound.comp2}"/>

MessageRejectedExceptionTransformer 将 MessagingException 对象作为输入,但是 OtherExceptionTransformer 将 ErrorMessage 对象作为输入。

到目前为止,我所理解的是 MessagingException 包含 failedMessage 和异常原因,而 ErrorMessage 应该包含 Message 类型。

现在,我主要担心的是,我不明白在哪种情况下,我不会收到 MessagingException 对象。

我试图从我的代码中抛出 nullPointerException 和 IllegalArgumentException ,并且 spring 将两者都作为消息异常处理。所以我想知道 otherError 通道何时会收到一条消息。

有人对此有看法吗?

4

1 回答 1

2

ErrorMessage一个有效载荷,MessagingException其中有两个属性:failedMessagecause(原始异常)。

如果消费者(例如转换器)的参数为MessagingException,则框架从消息中解包有效负载并调用它。如果消费者收到一条消息(或ErrorMessage),则使用原始消息调用它。

您的路由器专门在 a上路由MessageRejectedException,它是 的子类MessagingException

如果有任何其他MessagingException被抛出,则将采用另一条路线。

于 2013-10-16T15:33:27.943 回答