Apache Camel FTP - 如何手动启动路由

8
这个Camel路由应该从FTP服务器开始读取文件:
from("sftp://user@...")

现在,我不希望它自动启动或轮询或类似的操作。这应该是手动启动的(外部,JMX)。 我有其他路由通过MBean触发,我使用直接标签:

from("direct:myRoute1")

哪种方法是最好的,可以从FTP读取功能开始执行相同的操作?类似于:
from("direct:myRoute2")
.from("sftp://user@...")
.autoStartup(false)

这个好像有问题。手动触发JMX后,没有文件被FTP读取。我猜这两个“from”开启的路线是并行的,因此启动“direct:myRoute2”不会触发FTP。

我能否将FTP-URI放在除“from”之外的另一个组件中,以便在from(“direct:myRoute2”)之后启动FTP读取?

顺便说一句:这是一个独立的路线,与其他路线没有关联。

谢谢


2+ from已被弃用,请仅使用1。 - Claus Ibsen
谢谢 Claus。现在,我应该使用什么代替第二个 from? - publicMee
2个回答

8
你需要的是Poll Enrich:
from("direct:myRoute2")
.pollEnrich("ftp://localhost")
.to("mock:result");

现在触发直接模式(无论您发送什么),FTP消费者将启动。

1
谢谢Ramin。这正是我在寻找的。现在我有第二个问题,我可能会开一个新的线程,或者你或Claus可以在这里回答吗?如何限制轮询次数?实际上,我只想运行一次,但两次也可以。我只是希望路由在经过后停止。有没有办法配置它?在URI或其他地方? - publicMee
很高兴能帮到你。有许多方法可以实现这一点。例如,您可以使用Oncompletion。在此处阅读更多信息:http://camel.apache.org/oncompletion.html 如果您已经开始了新线程,对于在此处回答表示歉意。如果您已经开始了新线程,请在此处分享其链接,我和其他人将帮助您设置它。 - Ramin Arabbagheri

7

你好 Claus,感谢你的回答。假设我有一条独立的路由,与其他路由没有连接。我是这样构建它的:from("direct:myRoute2").from("sftp://user@...").autoStartup(false)。现在,如果我尝试使用 MBean 触发此路由,它仍然无法运行。因为 autoStartup 仍然是 false?我需要改变它吗?但是路由已经初始化了... - publicMee
在 MBean 中使用 producerTemplate.asyncCallback 将消息发送到 "direct:myRoute2"。 - publicMee
你需要先启动路由,有 JMX 操作可以启动路由。 - Claus Ibsen
我使用JMX启动路由,这不是问题。在以下路由中:from("direct:myRoute2").from("sftp://user@...").autoStartup(false) 手动启动(JMX)不会触发“FTP读取”。这是因为我禁用了autoStartup,还是因为FTP-URI在“.from(”内?如果是这种情况,我可以使用哪个“方法”代替FTP读取过程的“.from”?是“.inOnly”吗? - publicMee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接