我正在尝试通过端点发送sftp调用,并且需要将标头作为参数之一传递。有些人可以帮我解决这个问题。 我的路线看起来像这样
<route id="sftCall" autoStartup="true">
<from uri="sftp://{{host}}//{{Directory}}/${header.date}?password=banksftp.password}}&privateKeyUri=//{{privateKeyUri}}&scheduler=quartz2&scheduler.cron={{Scheduler}}&disconnect=true&noop=true"/>
<log message="Ends...${header.CamelBatchSize}"/>
</route>
另一条路线就像
<route id="route">
<from uri="timer"/>
<setHeader headerName="date">
<simple>20170512</simple>
</setHeader>
<to uri="direct:sftpCall"/>
</route>
感谢,,
答案 0 :(得分:1)
您的设置存在多个问题。哪里开始最好?
${header.date}
)。据我所知,您在Camel路线中无法拥有动态from
地址。因为这意味着您可以从多个端点消耗。 ${header.date}
并设置 recursive
选项。direct:sftpCall
。这意味着以from uri="direct:sftpCall"
开头的路线。但你没有这样的路线。我想,对于<to uri="direct:sftpCall"/>
,您要调用具有sftpCall
作为路由ID的SFTP路由。但这根本不符合目的地路线。
direct
是&#34;协议&#34; (同步内存中调用)。但您的目的地路线使用协议sftp
sftpCall
是路由ID。您不能通过其ID(据我所知)调用路线如果我的猜测是正确的并且您希望您的计时器路由触发您的sftp路由,则计时器路由必须将文件上传到sftp-server /目录sftp路线消耗。这只是看起来像这样。
<to uri="sftp://{{host}}//{{Directory}}..."/>
答案 1 :(得分:0)
你有2个误解
- 从端点定义
中使用标头 醇>
from
端点定义已修复对于您的路由定义,${header.date}
将用作硬代码字符串路径,因为当spring创建路径时没有交换对象。
- 使用直接组件
醇>
direct组件用于连接相同camel上下文中的现有路由,而不是启动/构建另一个路由。
如果要将文件上传到sftp服务器,那么您只需要定时器路由并将sftp
组件字符串粘贴到to
端点定义中并使用{{3 }或toD代替to
。
如果从sftp服务器下载文件,则需要使用RouteBuilder创建路由,并使用Recipient List来启动/停止创建的路由。