2013-02-12 61 views
1

我使用Spring集成的文件和ftp功能来实现它认为所有文件 写入加密的目录,然后ftp'ed到目标目录中的流动。消息的有效负载是文件Spring集成 - 文件消息流

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

'自定义加密'服务需要一个文件名,然后返回加密文件的名称。出站FTP服务工作,并在传输成功或失败时,加密文件名称将被移至特定文件夹。

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

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

我已经使用分离器/聚合器图案,以生成出站的ftp阶段之后被重新aggreated的第二消息考虑的第一个想法但这似乎不正确,因为分离器部未产生两个不同的消息,而复制原件。

回答

3

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

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

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

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

+0

谢谢。我曾想过按照选项2使用标题,但觉得这可能会有点作弊,因为我不想为标题添加一个名称/值的负载。就选项1而言,为了返回ftp操作的值,我会再次设置标题值? – emeraldjava 2013-02-12 14:29:54

+0

最后一个问题 - 对于'request-handler-advice-chain'是否有可能在链中同时拥有RequestHandlerRetryAdvice和ExpressionEvaluatingRequestHandlerAdvice bean? – emeraldjava 2013-02-12 14:33:37

+1

不确定你的意思是“FTP结果”;如果成功,线程将正常返回,如果抛出异常,它将不会调用第二个订阅者(默认情况下 - 它可以被忽略失败覆盖)。关于头文件 - 这是一种常见的方法 - 例如,做同样的事情。实际上,我们甚至提供了一个常量(FileHeaders.ORIGINAL_FILE)。 – 2013-02-12 16:14:19