Apache骆驼多播(ftps和文件)产生空文件

时间:2019-06-26 06:49:42

标签: apache-camel camel-ftp

我已经使用Groovy DSL创建了骆驼(2.20.1)路由。我需要为2个端点使用多播。 ftps和文件。如果路由的顺序是ftps和file,则file是在ftp服务器上写入的属性,但在文件系统上写入的是空文件(大小为0字节)。如果我颠倒顺序,即文件然后是ftps,则文件将正确写入文件系统,空文件将写入ftp服务器。 在Apache Mina FTP服务器上运行正常,但在客户端ftp服务器上,运行如上所述。

我尝试了两个多播选项:

.to("ftps:....").to("file:...")

以及

.to("ftps:...").to("file:..."))

也尝试过parallelProcessing(),但结果仍然相同。

camelContext.addRoutes(new RouteBuilder() {
 def void configure() {
  from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
   .multicast()
   .to("ftps://localhost:21/files?username=anonymous&password=anonymous&binary=true&fileName=file.txt&passiveMode=true&fileExist=Fail")
   .to("file://${directory}?fileName=\${file:name}-\${date:now:yyyyMMddHHmmssSSS}")
 }
})

我希望多播应将相同的内容写入两个端点而不会丢失数据。

1 个答案:

答案 0 :(得分:0)

请参见Why is my message empty?。文件使用者返回SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild'] ,它由第一个端点使用,因此对于第二个端点为空。多播之前,您需要启用Stream Caching或将主体转换为某些可重用的对象(例如InputStream)。

启用流缓存:

String

转换正文:

from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
    .streamCaching()
    .multicast()
    ...