我有一个带有定义如下定义的定时器路径的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以及为什么它失败了几次?
答案 0 :(得分:3)
不使用斜杠,或使用双斜杠。例如
"timer:foo"
或
"timer://foo"
然后当有双斜杠时,Camel认为这不是斜线,例如像http://foo.com,可以在浏览器中键入http:foo.com。
如果使用1或3个斜杠,则该斜杠将成为组件的上下文路径的一部分。只有少数组件支持前导斜杠,例如文件/ ftp组件,其中前导斜杠表示起始目录为/foo
等。