当前位置: 首页 > 知识库问答 >
问题:

Apache Camel FTP无法捕获远程FTP文件夹上的文件创建事件

公孙和怡
2023-03-14

我正在尝试使用Apache Camel FTP来使用被推送到FTP文件夹的文件。路由和连接到FTP服务器的骆驼上下文是好的,但我不能得到文件创建事件处理时,文件被推到FTP文件夹。下面是我的代码和日志:首先是我的pom.xml for camel(我使用的是camel 3.0.1版本)的一部分:

<!-- Listen FTP folder -->
        <!-- https://mvnrepository.com/artifact/org.apache.camel.springboot/camel-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel/camel-core-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-core-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel.springboot/camel-ftp-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-ftp-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel.springboot/camel-jacksonxml-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-jacksonxml-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel.springboot/camel-jackson-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-jackson-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel.springboot/camel-rabbitmq-starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-rabbitmq-starter</artifactId>
            <version>${camel.version}</version>
        </dependency>

初始化camel的RouteBuilder消耗:

package xx.listener.route;

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
import org.springframework.stereotype.Component;

import xx.listener.common.model.ddXMLModel;

@Component
public class DataRouter extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        System.out.println("Initialize camel route...");
        JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
        jacksonDataFormat.setInclude("NON_NULL");
        jacksonDataFormat.setPrettyPrint(true);

        from("ftp://user@localhost:21/ftp/files?password=abc@123&move=.done&moveFailed=.error")
                .log("${body}")
                .unmarshal().jacksonxml(ddXMLModel.class)
                .marshal(jacksonDataFormat)
                .log("${body}")
                .to("rabbitmq://localhost:5672/test_camel?username=root&password=123456&queue=camel.queue&autoDelete=false").end();
    }
}

启动应用程序时的日志:

Initialize camel route...
[INFO ] 2020-12-22 14:21:24.522 [main] SpringBootRoutesCollector - Loading additional Camel XML routes from: classpath:camel/*.xml
[INFO ] 2020-12-22 14:21:24.522 [main] SpringBootRoutesCollector - Loading additional Camel XML rests from: classpath:camel-rest/*.xml
[INFO ] 2020-12-22 14:21:24.530 [main] SpringBootCamelContext - Apache Camel 3.0.1 (CamelContext: camel-1) is starting
[INFO ] 2020-12-22 14:21:24.531 [main] JmxManagementStrategy - JMX is enabled
[WARN ] 2020-12-22 14:21:24.747 [main] RabbitMQComponent - The old syntax rabbitmq://hostname:port/exchangeName is deprecated. You should configure the hostname on the component or ConnectionFactory
[INFO ] 2020-12-22 14:21:24.755 [main] SpringBootCamelContext - StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
[WARN ] 2020-12-22 14:21:24.772 [main] JacksonDataFormat - The option autoDiscoverObjectMapper is set to false, Camel won't search in the registry
[INFO ] 2020-12-22 14:21:24.897 [main] SpringBootCamelContext - Route: route1 started and consuming from: ftp://user@localhost:21/ftp/files?move=.done&moveFailed=.error&password=xxxxxx
[INFO ] 2020-12-22 14:21:24.902 [main] SpringBootCamelContext - Total 1 routes, of which 1 are started
[INFO ] 2020-12-22 14:21:24.904 [main] SpringBootCamelContext - Apache Camel 3.0.1 (CamelContext: camel-1) started in 0.372 seconds
[INFO ] 2020-12-22 14:21:24.908 [main] ListenerApplication - Started ListenerApplication in 2.979 seconds (JVM running for 4.169)
CamelContext camelContext = new DefaultCamelContext();
        try {
            camelContext.addRoutes(new DataRouter());
            camelContext.start();
        }
        catch (Exception e){
            e.printStackTrace();
            camelContext.stop();
        }

我的代码出了什么问题。谢谢

共有1个答案

夏元明
2023-03-14

只有2个想法,因为没有发生任何事情(没有文件读取,没有错误)

  • 是否具有查看文件的用户权限?
  • 文件是否在[userHome]/ftp/files下?

第二点是因为骆驼FTP路径总是相对的。因此,用户的主路径(即用户在ftp登录后登陆的目录)是路径的起点。

 类似资料:
  • 本文向大家介绍java实现ftp上传 如何创建文件夹,包括了java实现ftp上传 如何创建文件夹的使用技巧和注意事项,需要的朋友参考一下 java如何实现ftp上传?如何创建文件夹? 最佳答案: 准备条件:java实现ftp上传用到了commons-net-3.3.jar包 首先建立ftphost连接 然后再利用ftpclient的makeDirectory方法创建文件夹 断开host连接 最后

  • 问题内容: 当我尝试使用apache commons ftpClient和以下代码上传简单的文本文件时: 在FTP服务器的根目录中创建了一个文件,但该文件为空。怎么了?我已经尝试在上传PDF文件时将ftp模式更改为BINARY。但文件的大小也为0。 我也只想上传一堆txt文件,所以默认的ascii模式应该可以,对吧? 问题答案: 好的,看来这是我的防火墙的探针。当我停用防火墙时,文件将毫无问题地写

  • 我总是得到: 多部分体中缺少端边界。 API沙箱没有帮助。可以在那里创建文件夹。 有效载荷为:

  • 问题内容: 我正在Swift中构建一个简单的程序,它应该将具有特定扩展名的文件复制到另一个文件夹中。如果该文件夹存在,程序将只将它们复制到该文件夹​​中;如果该文件夹不存在,则程序必须先将其复制。 运行此代码将正确识别MTS文件,但会导致“添加失败…”,我在做什么错? 问题答案: 从文档中: 放置的副本的路径。此路径必须在新位置包含文件或目录的名称。… 您必须将文件名附加到调用的目标目录中 (为S

  • 如果我使用获取id,那么它总是为null。 我首先使用此代码创建文件夹,并将其粘贴到https://github.com/googledrive/android-demos/blob/master/src/com/google/android/gms/drive/sample/demo/createFolderActivity.java 为了在文件夹中创建文件,我使用以下指南https://git

  • 问题内容: 我的开发电话正在运行。 在我的应用程序中,我试图在外部存储上创建一个文件夹,该文件夹将存储我的应用程序的调试信息。基本上,它将包含应用程序执行的所有命令,因此,当用户遇到问题时,我可以选择使它们从debug文件夹发送信息给我进行分析。 我首先尝试将文件写入文件夹,但发现创建文件夹时出错。最初,我使用,然后又移至也不起作用。 我有我的清单。 这是用于创建文件夹的代码: 这是我也尝试过的: