Spring集成中消息异常和错误消息的使用差异

时间:2013-10-16 14:03:18

标签: spring-integration

我必须分析下面给出的一个Spring集成代码:

<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处理为仅Messaging Exception。所以我想知道otherError通道什么时候会收到一条消息。

有没有人对此有看法?

1 个答案:

答案 0 :(得分:2)

ErrorMessage的有效负载为MessagingException,其中包含两个属性:failedMessagecause(原始异常)。

如果消费者(例如变压器)的参数为MessagingException,则框架会从消息中解除有效负载并调用它。如果消费者接收消息(或ErrorMessage),则使用原始消息调用它。

您的路由器专门在MessageRejectedException上路由,MessagingExceptionMessagingException的子类。

如果抛出任何其他{{1}},将采取其他路线。