问题描述
用例: 当用户点击一个端点时,我们会生成一个csv文件,我们希望将其上传到其他来源(FTP和S3)。上传之前,我们需要对文件进行加密和转换。这是路线的样子(过于简化):
FTP路由:
from("file:temp?include=sample.csv&noop=true")
.routeId("ftpRoute" + LocalDateTime.Now())
.marshal().pgp("file:temp/encryptionKey.asc","someuserid",null,true,true)
.process(new SomeComplexProcessor())
.to("sftp:localhost:22/destinationDir?username=username&password=RAW(password)")
.setHeader(FILE_NAME,"Metadata.txt")
.process(new MetadataFileGenerator())
.marshal()
.bindy(BindyType.Csv,MetadataFile.class)
.to("sftp:localhost:22/destinationDir?username=username&password=RAW(password)")
.process(new KillRouteProcessor());
S3路线:
from("file:temp?include=sample.csv&noop=true")
.routeId("s3Route" + LocalDateTime.Now())
.marshal().pgp("file:temp/encryptionKey.asc",true)
.process(new SomeComplexProcessor())
.to("aws-s3:bucketName?accessKey=ACCESS_KEY&secretKey=RAW(SECRET_KEY)®ion=REGION")
.setHeader(FILE_NAME,MetadataFile.class)
.to("aws-s3:bucketName?accessKey=ACCESS_KEY&secretKey=RAW(SECRET_KEY)®ion=REGION")
.process(new KillRouteProcessor());
工作原理: S3和SFTP上传路由正常。
要求:
@H_502_18@我尝试过的事情:
@H_502_18@环境:
骆驼3.4.3,Spring Boot 2.2.3,Java8,
解决方法
我设法通过使用静态路由ID(已删除LocalDateTime.now())使其正常工作。这是我在解决骆驼问题时学到的。
- 始终提供每条路线的路线ID。尤其是在使用“直接”路线时。
- 请勿使用动态路由ID。这个非常重要。在路由ID中使用
LocalDateTime.now()
时,我看到了这个问题。在更改之前,我已经看到此错误:
不允许同一端点有多个使用者:direct:// routeName .....
- 使用循环或调用任何直接路由时,请始终使用丰富。
例如.enrich("direct:subroute",AggregationStrategies.useOriginal())
。
这会将父路由标题的副本共享到子路由。它可以帮助您避免一些奇怪的问题。
如果您想了解更多信息,请随时发表评论。