camel-http 4 2.22 - toD不工作

lh80um4z  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(110)

在从2.16.5迁移到2.22.0之后,动态路由(toD)中的camel动态uri似乎停止工作了。

<route>
    <from uri="timer://foo?fixedRate=true&amp;period=1000"/>
    <setHeader headerName="SMSURI">
        <constant>localhost:9090/</constant>
    </setHeader>
    <toD uri="https4://${header.SMSURI}?throwExceptionOnFailure=false"/>
</route>

我得到了以下异常:

2018-08-11T14:41:07,770 | INFO  | Camel (testContext) thread #27 - timer://foo | route5                           | 160 - org.apache.camel.camel-core - 2.22.0 | java.lang.IllegalArgumentException: Cannot find endpoint with scheme https4
    at org.apache.camel.runtimecatalog.AbstractCamelCatalog.endpointProperties(AbstractCamelCatalog.java:529)
    at org.apache.camel.http.common.HttpSendDynamicAware.prepare(HttpSendDynamicAware.java:57)
    at org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:118)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197)
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

我知道动态URI有两种替代方法,一种是设置Exchange.HTTP_URI,然后使用静态路由“to”和任意url,第二种是使用recipientList。但是,我不喜欢第一种使用“to”的方法,因为我需要设置任意url。我目前使用的是第二种方法,receipientList类似于下面的内容(注意,setHeader在这里仅用于演示。url是在我的项目中的一个处理器类中动态检索和设置的):

<route>
    <from uri="timer://foo?fixedRate=true&amp;period=1000"/>
    <setHeader headerName="SMSURI">
        <constant>localhost:9090/</constant>
    </setHeader>
    <recipientList>
        <simple>https4://${header.SMSURI}?throwExceptionOnFailure=false</simple>
    </recipientList>
</route>

这个很好用。不过,我真的很喜欢ToD选项。
还有, Camel 网站上说:
动态至-即装即用
从Camel2.16开始,有一个新的动态的。更多的细节请看消息端点。
http://camel.apache.org/how-to-use-a-dynamic-uri-in-to.html
有谁能帮我弄明白http 4是否已经删除了对toD的支持?或者这是一个bug?
PS:我是在OSGI包内的Karaf 4.2容器中运行这个程序的,使用的是蓝图xml。

gojuced7

gojuced71#

我通过将组件放在toD中使用的头文件中来解决这个问题。

<route>
    <from uri="timer://foo?fixedRate=true&amp;period=1000"/>
    <setHeader headerName="SMSURI">
        <constant>https4://localhost:9090/</constant>
    </setHeader>
    <toD uri="${headers.SMSURI}" />
</route>

相关问题