Apache Camel计时器路由URI语法

时间:2014-08-01 20:26:35

标签: apache-camel

我有一个带有定义如下定义的定时器路径的camel应用程序:

String timerURI = "timer:/MyApplication?period=5m";

我意识到URI语法可能不正确。 Apache Camel站点上显示的正确语法应为:

String timerURI = timer://MyApplication?period=5m";

但是,我注意到日志中有一些奇怪的行为。在第一个实例中,我展示了将URI记录为:

的驼峰
(route1) from(timer:///MyApplication?period=5m) --> bean[com.mypackage.....]

在第二个实例中,日志显示为:

(route1) from(timer://MyApplication?period=5m) --> bean[com.mypackage.....]

我尝试了第三个选项

String timerURI = timer:MyApplication?period=5m";

它在日志中显示为:

(route1) from(timer://MyApplication?period=5m) --> bean[com.mypackage.....]

当我使用单个/定义URI时,与第一种情况一样,我看到了这样的异常:

org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: direct: due to: Expected scheme-specific part at index 7: direct:
    at org.apache.camel.impl.DefaultCamelContext.normalizeEndpointUri(DefaultCamelContext.java:601)
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:483)
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:63)
    at org.apache.camel.util.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:88)
    at org.apache.camel.processor.RecipientListProcessor.resolveEndpoint(RecipientListProcessor.java:223)
    at org.apache.camel.processor.RecipientListProcessor.createProcessorExchangePairs(RecipientListProcessor.java:163)
    at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:208)
    at org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:153)
    at org.apache.camel.processor.RecipientList.process(RecipientList.java:112
::::::::::::::::::::::::::::::::
Caused by: java.net.URISyntaxException: Expected scheme-specific part at index 7: direct:
    at java.net.URI$Parser.fail(URI.java:2829)
    at java.net.URI$Parser.failExpecting(URI.java:2835)
    at java.net.URI$Parser.parse(URI.java:3038)
    at java.net.URI.<init>(URI.java:595)
    at org.apache.camel.util.URISupport.normalizeUri(URISupport.java:448)
    at org.apache.camel.impl.DefaultCamelContext.normalizeEndpointUri(DefaultCamelContext.java:599)
    ... 51 more

所以只有第一个实例,当我有单个/时,我看到了这个异常,但其他两个看起来很好。但即使是陌生人,这个错误也不会经常重复。我从来没有看到它是我的本地工作区,但我在Dev测试服务器中看到过两次,在Integration测试服务器中看到过两次。即使在遇到此异常失败后,它也会在下次计时器运行5分钟后运行。有没有人知道骆驼如何解释这些URL以及为什么它失败了几次?

1 个答案:

答案 0 :(得分:3)

不使用斜杠,或使用双斜杠。例如

"timer:foo"

"timer://foo"

然后当有双斜杠时,Camel认为这不是斜线,例如像http://foo.com,可以在浏览器中键入http:foo.com。

如果使用1或3个斜杠,则该斜杠将成为组件的上下文路径的一部分。只有少数组件支持前导斜杠,例如文件/ ftp组件,其中前导斜杠表示起始目录为/foo等。