rest - Apache Camel - 作为 GET 请求的结果从 FTP 获取文件列表
问题描述
正如标题所示,我正在尝试从 FTP 目录中获取文件列表,以作为 GET 请求的响应发送。
我有当前的休息路线实施:
rest().get("/files")
.produces(MediaType.APPLICATION_JSON_VALUE)
.route()
.routeId("restRouteId")
.to("direct:getAllFiles");
在直接路线的另一边,我有以下路线:
from("direct:getAllFiles")
.routeId("filesDirectId")
.to("controlbus:route" +
"?action=start" +
"&routeId=ftpRoute");
from([ftpurl])
.noAutoStartup()
.routeId("ftpRoute")
.aggregate(constant(true), new FileAggregationStrategy())
.completionFromBatchConsumer()
.process(filesProcessor)
.to("controlbus:route" +
"?action=stop" +
"&routeId=" + BESTANDEN_ROUTE_ID);
手头的问题是,使用这种方法,请求不会等待整个过程完成,它几乎会立即返回一个空响应,状态码为 200。
我尝试了多种解决方案,但它们都以两种方式中的任何一种都失败了:要么请求得到响应,即使路由尚未完成,要么路由卡在某个时刻等待飞行中的交换并等待 5 分钟超时接着说。
提前感谢您的建议和/或帮助!
注意:我正在使用 Spring Boot 应用程序 (2.0.5) 和 Apache Camel (2.22.1)。
解决方案
我认为这里的问题是你的两条路线没有连接。您正在使用控制总线开始第二条路线,但它不会将值返回到第一条路线 - 正如您所指出的那样,它刚刚完成。
我认为你需要的(我没有测试过)是这样的:
from("direct:getAllFiles")
.routeId("filesDirectId")
.pollEnrich( [ftpurl], new FileAggregationStrategy() )
.process( filesProcessor );
因为这将同步使用您的 ftp 消费者,并进行后期处理并将值返回到您的休息路线。
推荐阅读
- image-processing - 对梯度直方图的理解
- visual-studio-code - VS Code 更新服务权限被拒绝错误
- javascript - 无法访问组件中的 json 数据
- javascript - 编写一个函数,返回一个索引和另一个索引之间的字符串子集,而不使用内置函数
- windows - Visual Studio 2012 到 2017 迁移后的链接错误
- http-delete - 控制器找不到DELETE路由,但是方法在控制器里
- r - 我可以缩写 df[ !is.na(df$val) & df$val > 15] 吗?
- java - 使用 Spring-Boot 2.1 从 .yml 读取对象列表
- excel - VBA 获取打开 Excel 二进制工作簿
- php - 有没有办法像谷歌一样用箭头和边框制作叠加层?