我是Apache camel的新手,想要实现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(processor)
似乎,在每次通过Quartz命中时,都会触发相同的URL,因此我看到保存到DB的重复值。请说明为什么Dynamic uri没有按预期工作。
我调用处理器,计算和设置我从响应端点获得的Bean值。但是当Quartz下次访问url时,bean值不会更新并采用默认值。 Bean定义通常是getter setter,注册是我使用Simple注册表
SimpleRegistry simpleRegistry = new SimpleRegistry ();
// create CamelContext
context = new DefaultCamelContext (simpleRegistry);
simpleRegistry.put("bean", bean);
提前致谢
要在camel-route上使用动态URI,必须在Simple表达式中包含变量。
由于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,使用Dynamic to()部分还有一个注释:
注意:我们需要使用
.endRest()
告诉Camel路由结束的位置,因此我们可以回到Rest DSL并继续定义REST服务。
否则,您可以在常规to()
中使用简单实现该动态端点。见Apache Camel: How to use a dynamic URI in to()。