toD()-通过Quartz计划的骆驼2.23中的动态URI形成

时间:2019-03-04 11:32:35

标签: apache-camel quartz-scheduler

我是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);

预先感谢

1 个答案:

答案 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,并调用指定的方法fromsize

Apache Camel: Rest DSL使用动态to()部分也有一个注释:

  

注意:我们需要使用.endRest()来告诉骆驼路线的终点,因此我们可以返回Rest DSL并继续定义REST服务。

否则,您可以在常规to()内部使用简单的方法来实现该动态端点。参见Apache Camel: How to use a dynamic URI in to()