【问题标题】:Spring Integration - default exception channel implementationSpring Integration - 默认异常通道实现
【发布时间】:2015-03-18 10:30:27
【问题描述】:

我是 Spring 集成的新手。作为我的一项任务的一部分,我应该有一个默认的错误处理机制来处理管道中的任何故障。

我有一个文件入站通道适配器作为起点,我已经写了如下:

<int-file:inbound-channel-adapter id="inbound.jms.adapter" 
     directory="C:\Test
     channel="testChannel"
     auto-startup="false">
     <int:poller fixed-rate="1000" error-channel="default-error-channel" />
</int-file:inbound-channel-adapter>

通道将被不同的组件进一步使用。

我的问题是,如果进一步失败,异常会退回到默认错误通道吗?

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    我的问题是,如果进一步失败,异常会退回到默认错误通道吗?

    不,不完全。如果您的下游是direct(仅与DirectChannels 组成),那么是的:在第一个轮询通道适配器上,所有异常都将被抛出到default-error-channel

    但是,如果将您的消息转移到不同的渠道(QueueChannelExecutorChannel),则将通过它们的机制处理异常。在大多数情况下,它是 Spring 集成中的默认 errorChannel

    查看更多信息here

    此外,ExpressionEvaluatingRequestHandlerAdvice 具有特定端点的异常处理功能。

    【讨论】:

    • 谢谢阿特姆。我是否正确假设通过为“erorChannel”提供服务激活器将为应用程序中发生的任何异常提供全局捕获块。
    • 是的。但正如我所说:它会一直工作,直到您不将消息传输到非直接渠道。它在这里像纯 Java 中的 try...catch 一样工作:如果您在该块中启动一个新线程,它的异常将不适用于您的根 try...catch
    • 好的。谢谢你。如果我将消息传递给非直接渠道,那么我需要明确提及错误渠道。我对么?我有类似的东西
    • 好的。谢谢你。如果我将消息传递给非直接渠道,那么我需要明确提及错误渠道。我对么?我现在有这样的东西
    • inbound.jms.channel 上的服务激活器抛出一个异常,我希望会在 errorChannel 上的服务激活器中被捕获。但它没有发生。为什么不属于全局errorChannel?
    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多