如何根据标头值“分组”邮件

时间:2019-08-14 14:11:49

标签: spring spring-integration spring-integration-dsl

我正在尝试基于遵循以下标准的文件扩展名创建文件zip:filename。{NUMBER},我正在做的是读取文件夹,按。{number}分组,然后创建唯一文件.zip以.num结尾,例如:

文件夹/

  

file.01

     

file2.01

     

file.02

     

file2.02

文件夹-> /已处理

  

file.01.zip,其中包含-> file.01,file2.01

     

file02.zip,其中包含-> file.02,file2.02

我所做的是使用outboundGateway,拆分文件,丰富读取文件扩展名的标头,然后汇总读取该标头,但似乎无法正常工作。

public IntegrationFlow integrationFlow() {
return flow
.handle(Ftp.outboundGateway(FTPServers.PC_LOCAL.getFactory(), AbstractRemoteFileOutboundGateway.Command.MGET, "payload")
                .fileExistsMode(FileExistsMode.REPLACE)
                .filterFunction(ftpFile -> {
                    int extensionIndex = ftpFile.getName().indexOf(".");
                    return extensionIndex != -1 && ftpFile.getName().substring(extensionIndex).matches("\\.([0-9]*)");
                })
                .localDirectory(new File("/tmp")))
            .split() //receiving an iterator, creates a message for each file
            .enrichHeaders(headerEnricherSpec -> headerEnricherSpec.headerExpression("warehouseId", "payload.getName().substring(payload.getName().indexOf('.') +1)"))
            .aggregate(aggregatorSpec -> aggregatorSpec.correlationExpression("headers['warehouseId']"))
            .transform(new ZipTransformer())
            .log(message -> {
                log.info(message.getHeaders().toString());
                return message;
            });
}

它给我一条包含所有文件的消息,我应该希望收到2条消息。

1 个答案:

答案 0 :(得分:0)

由于此dsl的性质,我具有动态数量的文件,因此我无法计算以相同数字结尾的消息(文件),而且我认为超时可能不是一个很好的发布策略,我只是自己写了代码而没有写到磁盘:

self