当前位置: 首页 > 知识库问答 >
问题:

Java DSL RouteBuilder的configure方法中的Exchange/body引用

阴高刚
2023-03-14

我已经使用apache camel版本2.21.2编写了以下路径。还有一个我想用来记录正文的函数。

Function<Object, String> returnSomethingInteresting = o -> {
    // ... compute something depending on the o class type
    return "the result based on the body";
};

@Override
public void configure() {
    from("timer://foo?fixedRate=true&period=15s") // every 15 seconds
        .setBody( Bdd.getVOs ) // I call the database to retrieve a List<MyResulSetObjectVO>
        .split().body() //split the list in its components

        .log( returnSomethingInteresting.apply( simple("${body}").evaluate(exchange, MyResulSetObjectVO.class))))     

        .to("..."); // continue the execution
}//configure

首先,我使用供应商从数据库中获取vo列表。然后,我将列表拆分为其元素,分别处理每个元素。

但在处理它们之前,我想记录它的主体,但不是主体本身,而是以主体作为参数调用函数的结果。

但是评估表达式需要Exchange对象,但我找不到检索它的方法。它是否有一个可用的引用,通过routeBuilder从配置方法到交换对象?

我知道还有其他选择。

就像我可以使用一个处理器(即siganture提供一个exchange对象的处理方法)而不是log语句一样。但我更喜欢使用日志,因为我发现代码更清晰。

甚至我也可以在MyResultSetTobjectVO中插入函数,并像这样调用它。这很好用。但该函数是众多VO中的一个,我不想在每个VO中都编写它,每当更新代码时,复制

log("${body.returnSomethingInteresting }")

在另一个stackoverflow问题中,引用了使用exchange对象的evaluate方法。但是没有提到上下文,所以我想是在处理器内部,我不希望使用它。

也许我不需要使用求值方法,我可以获得对身体对象的引用,这也适合我。

因此,我想知道如何在camel dsl routeBuilder的configure方法中获得对exchange/body对象的引用?

提前非常感谢您。

共有1个答案

轩辕嘉平
2023-03-14

不能,配置方法用于配置路由。在启动期间仅调用一次。

正如您所提到的,您可以使用内联处理器来调用该函数。简单语言还可以调用bean/方法并使用bean参数绑定,以便它可以将来自交换的数据绑定到bean方法签名。然后您可以直接在Log EIP中使用简单语言。

 类似资料:
  • 本文向大家介绍startup class的configure方法有什么作用?相关面试题,主要包含被问及startup class的configure方法有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,application builder,Hosting environment, logo factory, 在这里我们可以

  • 错误:无法将类型为“std::_bit_reference&”的非常量lvalue引用绑定到类型为“std::vector::reference”{aka“std::_bit_reference”}的rvalue 因此,它抱怨,因为只有第二个参数是rvalue

  • 我目前正在使用下面的,但我无法想象这是最有效率的方式?

  • 这里我们创建了一个类演示,其中有两个方法m1和m2,并使用这个关键字通过m2调用m1。我的问题是我们正在传递(演示o)作为m1方法中的参数,我们如何将与我们所在的相同类的引用作为参数传递,并且这个关键字引用一个对象,这个关键字如何引用一个类的引用? 欢迎提供任何参考资料。

  • 以下的宏为configure脚本管理版本号。使用它们是可选的。 宏: AC_PREREQ version) 确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版本比version 要早,就在标准错误输出打印一条错 误消息并不会创建configure。例如:AC—PREREQ(1.8) 如果你的'configure.in'依赖于在不同Autoconf版本中改

  • 我们可以按以下方式对汽车列表进行排序:, 如果我们看到方法<代码>比较器的签名。比较,输入参数类型为函数 在上面的例子中,如何转换为