2

我想配置一个to(uri)可以在运行时指定的骆驼路线。

我尝试了以下方法:

public class Foo extends RouteBuilder {
    @Override
    public void configure() {
        // the URI can point to different hosts
        from("direct:start").to(${someUri}");
    }
}

进而

ProducerTemplate pt = camelContext.createProducerTemplate();
pt.requestBodyAndHeader("direct:start", "someUri", "http://example.com");

但是,上述方法不起作用(Camel 抱怨没有默认端点)。

解决这个问题的最佳方法是什么?

4

3 回答 3

4

尽管已经回答了这个问题,但我想分享这个其他选项来实现您正在寻找的东西,以防其他人仍然想知道如何做到这一点:

自 Camel 2.16 以来有一种新方法称为“toD”,基本上意味着“动态到”。这里是官方参考文档

from("direct:start")
  .toD("${someUri}");

在这种情况下, toD 方法使用简单语言解析参数,这意味着您可以使用该语言支持的任何属性。

您还可以查看关于同一主题的其他 StackOverflow 答案。

于 2016-11-17T15:18:36.090 回答
0

我只是使用了前面没有“$”的花括号。这是我所做的:

{headers.reQueueName} instead of ${headers.reQueueName} for the uri and it worked : 
  <to id="requeue" uri="jmsamq:queue:{headers.reQueueName}"/> here is my implementation    :    


<route id="_throttleRoute">
            <from id="throttleRouteStarter" uri="direct:throttleRouteService"/>
            <log id="_Step_5" message="Camel throttle Route Started"/>
            <log id="_Step_5_1" message="Camel throttle Route is ${headers.next}"/>
            <to id="restThrottleCall" uri="restlet:http://host:port/path"/>
            <process id="throttleRouteProcess" ref="throttleServiceProcessor"/>
            <choice id="_choice2">`enter code here`
                <when id="_when3">
                    <simple>${headers.next} == 'requeue'</simple>   
                    <to id="requeue" uri="jmsamq:queue:{headers.reQueueName}"/>
                    <log id="_Step_wait1" message="ReQueue sending to ${headers.reQueueName}"/>
                </when>
                <when id="_when4">
                    <simple>${headers.next} == 'process'</simple>
                    <log id="_logNext" message="Invoking Next Work Unit ${headers.next}"/>
                    <process id="jBPMRouteProcess" ref="jBPMRouteProcessor"/>
                </when>
                <otherwise id="_otherwise2">
                    <log id="_log5" loggingLevel="WARN" message="Next for orderId: ${headers.orderid} not found"/>
                </otherwise>
            </choice>
        </route>
于 2017-08-15T20:30:05.887 回答