【问题标题】:toD() - Dynamic URI formation in camel 2.23 scheduled via QuartztoD() - 通过 Quartz 调度的骆驼 2.23 中的动态 URI 形成
【发布时间】:2019-07-25 17:09:36
【问题描述】:

我是 Apache camel 的新手,想实现 toD(),它可以动态构建 URI 并从 Beans 添加请求参数值。

下面的代码sn-p -

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 中的重复值。 请提出为什么动态 uri 没有按预期工作。

正在调用处理器,计算和设置我从端点响应中获得的 Bean 值。但是下一次 Quartz 打 url 的时候,bean 的值没有更新,取默认值 . bean定义是常用的getter setter,注册是我用过的Simple registry

SimpleRegistry simpleRegistry = new SimpleRegistry ();
            // create CamelContext
            context = new DefaultCamelContext (simpleRegistry);

            simpleRegistry.put("bean", bean);

提前致谢

【问题讨论】:

  • 您能否通过edit 发布您的bean 定义和注册码。你如何更改fromsize?谢谢!
  • 请找到更新后的 sn-p,以粗体突出显示。

标签: apache-camel quartz-scheduler


【解决方案1】:

为了在 camel-route 上使用 动态 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-component bean: 告诉 Camel 获取使用您指定名称 bean 注册的 bean 并调用指定的方法 fromsize

Apache Camel: Rest DSLUsing Dynamic to()部分也有注释:

注意:我们需要使用.endRest() 告诉Camel 路由的终点,这样我们才能回到Rest DSL 继续定义REST 服务。

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

【讨论】:

  • 感谢您的回复。我正在使用 Rest 端点,并且希望每次都通过 Quartz 轮询来更改它。请在上面的代码中建议我,我的 Bean 值不会在每次调用时都保持不变。所以它一次又一次地点击相同的 URL。而且我也尝试过 spel... 与 #{@bean.from} -> 这不起作用,bean 没有解决.. 请建议这里做错了什么
猜你喜欢
  • 2011-06-17
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多