【问题标题】:Apache camel multicast (ftps & file) producing empty fileApache骆驼多播(ftps和文件)产生空文件
【发布时间】:2019-06-26 06:49:42
【问题描述】:

我使用 groovy DSL 创建了一个骆驼 (2.20.1) 路由。我需要对 2 个端点使用多播,即。 ftps 和文件。如果路由的顺序是 ftps 和文件,则文件是写入 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}")
 }
})

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

【问题讨论】:

    标签: apache-camel camel-ftp


    【解决方案1】:

    Why is my message empty?。文件使用者返回InputStream,由第一个端点使用,因此对于第二个端点为空。您需要在多播之前启用Stream Caching,或者将body 转换为一些可重用的对象(例如String)。

    启用流缓存:

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

    转换正文:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2018-09-09
      • 2014-02-11
      相关资源
      最近更新 更多