【问题标题】:Spring Integration - File Message FlowSpring 集成 - 文件消息流
【发布时间】:2013-02-12 09:15:14
【问题描述】:

我正在使用 Spring Integration 的文件和 ftp 功能来实现查看所有文件的流程 写入加密目录,然后 ftp'​​ed 到目标目录。消息的有效负载是一个文件

File Inbound Poller -> Custom Encryption -> Outbound FTP -> Handle Original File

“自定义加密”服务接收文件名,然后返回加密文件的名称。出站 FTP 服务正常工作,传输成功或失败时,加密文件名将移动到特定文件夹。

新的要求是我需要移动原始文件名而不是加密文件名。我不确定实现这个的正确方法是什么,或者我有什么选择?

File Inbound Poller -> Custom Encryption -> Outbound FTP
                    |                               |
                    >                               >     -> Handle Original File 

我考虑的第一个想法是使用拆分器/聚合器模式生成第二条消息,该消息在出站 ftp 阶段后重新聚合,但这似乎不正确,因为拆分器不会生成两条不同的消息,而是复制原始消息。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    有很多方法可以做到这一点,包括...

    1. 将第一个频道设为<publish-subscribe-channel/> 订阅加密器order="1" 和处理程序order="2"。只有在其他流程正常完成后才会调用处理程序。

    2. 在加密服务前添加<header-enricher/>,将原文件复制到header<header name="orig" expression="payload"/>,然后在下游代码中使用header。

    第一个就像您的“拆分器”评论 - 有效地允许 2 个流处理相同的消息。

    【讨论】:

    • 谢谢。我曾想过按照选项 2 使用标题,但觉得这可能有点作弊,因为我不想在标题中添加大量名称/值。就选项1而言,为了返回ftp操作的值,我会再次设置header值吗?
    • 最后一个问题 - 对于“request-handler-advice-chain”,链中是否可以同时包含 RequestHandlerRetryAdvice 和 ExpressionEvaluatingRequestHandlerAdvice bean?
    • 不确定“FTP 结果”是什么意思;如果成功,线程将正常返回,如果抛出异常,则不会调用第二个订阅者(默认情况下 - 它可以用'ignore-failures'覆盖)。关于标题 - 这是一种常见的方法 - 例如, 做同样的事情。事实上,我们甚至提供了一个常量(FileHeaders.ORIGINAL_FILE)。
    • 关于 是的 - 这是一个(嵌套的)建议链。当然,在这种情况下,顺序很重要。通常,在这种情况下,重试建议将在 onFail/onSuccess 表达式建议之后。但是请注意,如果由于某种原因,您首先需要重试建议,那么 2.2.0(在 2.2.1 中修复)中存在一个错误,即重试建议之后的其他建议在重试时没有被调用。
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多