我是Apache骆驼的新手,并且想实现toD()来动态构建URI并从Beans添加请求参数值。
下面的代码段-
from(“ quartz2:// timer?cron = 0 + 0/1 + + + * +?”) .noAutoStartup()。routeId(ROUTE_ID).log(“ Route Started”) .toD(http://localhost:3420/contextpath?from= $ {bean:bean.from}“ +”&size = $ {bean:bean.size}“) .process(处理器)
似乎,通过Quartz的每次匹配都触发了相同的URL,因此我看到重复的值保存到DB中。 请提出为什么Dynamic uri无法按预期工作的原因。
我正在调用处理器,计算并设置我从端点响应获得的Bean值。但是,当下一次Quartz到达URL时,bean的值不会更新,并采用默认值 。 Bean定义是常用的getter设置方法,而注册是我使用过的简单注册表
SimpleRegistry simpleRegistry = new SimpleRegistry ();
// create CamelContext
context = new DefaultCamelContext (simpleRegistry);
simpleRegistry.put("bean", bean);
预先感谢
答案 0 :(得分:0)
为了在骆驼路线上使用动态URI ,您必须在 Simple < / strong>表达式。
由于Camel 2.16.0 版本的端点实现toD()
支持Simple expression language,因此您可以定义dynamic-URI as message-endpoint:
from("quartz2://timer?cron=0+0/1+++*+?")
.noAutoStartup()
.routeId(ROUTE_ID)
.log("Route Started")
.toD( "http://localhost:3420/contextpath?from=${bean:bean.from}&size=${bean:bean.size}" );
因此,表达式${bean:bean.from}
和${bean:bean.size}
应该通过在URI字符串中使用Bean language直接进行内插。这个bean组件bean:
告诉Camel使用您指定的名称bean
注册bean,并调用指定的方法from
和size
。
Apache Camel: Rest DSL的使用动态to()部分也有一个注释:
注意:我们需要使用
.endRest()
来告诉骆驼路线的终点,因此我们可以返回Rest DSL并继续定义REST服务。
否则,您可以在常规to()
内部使用简单的方法来实现该动态端点。参见Apache Camel: How to use a dynamic URI in to()。