toD() - 通过Quartz调度的camel 2.23中的动态URI形成

问题描述 投票:0回答:1

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

提前致谢

apache-camel quartz-scheduler
1个回答
0
投票

要在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并调用指定的方法fromsize

Apache Camel: Rest DSL,使用Dynamic to()部分还有一个注释:

注意:我们需要使用.endRest()告诉Camel路由结束的位置,因此我们可以回到Rest DSL并继续定义REST服务。

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

© www.soinside.com 2019 - 2024. All rights reserved.