spring-integration:入站适配器的错误处理
spring-integration: Error handling on inbound adapters
基础知识:
- 使用 spring 4.1.1 与 DSL 的集成、引导和 1.0.0。
- 多个入站 SFTP 适配器按不同的计划从不同的供应商处获取文件。
- 每个集成流程在文件下载后将 headers 附加到消息中以识别供应商来源。
- 使用 MessagePublishingErrorHandler 处理异常。
- 标准消息流在成功处理消息或未能完成消息时通知外部监视解决方案。使用消息 headers 来识别失败的流程。
在我们收到消息后,成功和错误流程都很好用。但是,当我们遇到在生成消息之前发生的错误(即无法连接到 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 我们一起来看看。
基础知识:
- 使用 spring 4.1.1 与 DSL 的集成、引导和 1.0.0。
- 多个入站 SFTP 适配器按不同的计划从不同的供应商处获取文件。
- 每个集成流程在文件下载后将 headers 附加到消息中以识别供应商来源。
- 使用 MessagePublishingErrorHandler 处理异常。
- 标准消息流在成功处理消息或未能完成消息时通知外部监视解决方案。使用消息 headers 来识别失败的流程。
在我们收到消息后,成功和错误流程都很好用。但是,当我们遇到在生成消息之前发生的错误(即无法连接到 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 我们一起来看看。