spring-integration:入站适配器的错误处理

spring-integration: Error handling on inbound adapters

基础知识:

在我们收到消息后,成功和错误流程都很好用。但是,当我们遇到在生成消息之前发生的错误(即无法连接到 sftp 服务器)时,我们没有机会附加 headers.

我一直在查看示例和文档,但我找不到一个好方法来附加相同的 headers 来自 MessagePublishingErrorHandler 产生的错误消息而不覆盖轮询器上的错误处理程序,或者为每个入站集成创建自定义错误流。我在这里有什么选择?

这是配置之一的示例:

        IntegrationFlows
        .from(
            Sftp.inboundAdapter(sessionFactory)
                    .autoCreateLocalDirectory(true)
                    .localDirectory(configProperties.getLocalDirectory())
                    .preserveTimestamp(true)
                    .remoteDirectory(configProperties.getRemoteDirectory()),
            c -> c.poller(Pollers
                    .fixedRate(properties.getSftpInterval(), properties.getSftpIntervalUnit())
                    .errorHandler(errorHandler)) // custom error handler?
        )
        .enrichHeaders(
                    MapBuilder
                            .with("vendorName", "vendor1")
                            .get()
        )
        .channel("fileChannelHandler")
        .get();

是的 - 问题是,对于轮询通道适配器,如果在 MessageSource.receive() 中抛出异常,则还没有任何消息可以通过自定义 headers 增强。

该框架目前不允许修改 ErrorMessage 本身的 header(它具有原始异常作为此类异常的有效负载)。

一个 work-around(除了您的自定义 EH)将在每个 error-flow 上放置一个 header enricher 以识别源适配器。

将来,框架可以向 ErrorMessage 添加一个 header,其中包含通道适配器的 ID,以便可以在常见的错误流中识别源。

欢迎打开 'Improvement' JIRA Issue 我们一起来看看。