xml中的apache骆驼过滤器。xml中传递参数给Bean

K.I*_*.I. 5 java xml spring activemq-classic apache-camel

我是使用 activemq 和 Camel 的新手。

我有这些问题:

  1. 我有一个 bean 和 bean 方法,它们由过滤器调用。

    <filter>
       <method ref="MyBean" method="CheckReceivedFilesByParameters"/>
       <to uri="direct:b"/>
    </filter>
    
    Run Code Online (Sandbox Code Playgroud)

    方法 CheckReceivedFilesByParameters 返回布尔值。如果为真,则下一条路线成功启动。错误时如何调用路由(直接:b)。我想用 xml 来做到这一点。我试图在标签外调用方法,但没有运气。

    <to uri="bean:MyBean?method=CheckReceivedFilesByParameters"/>
    <filter>
       <simple>false</simple>
       <to uri="direct:b"/>
    </filter>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如何通过 Exchange 消息正确地将参数传递给 MyBean 方法。什么是最佳实践?现在我通过创建标题来做,稍后在我的方法中我得到 headerValues。我的 xml 中的示例。

    <setHeader headerName="RouteId">
        <constant>Test1</constant>
    </setHeader>
    
    Run Code Online (Sandbox Code Playgroud)

    然后在 MyBean 方法值中获取标题。 String routeId = exchange.getIn().getHeader("RouteId", String.class);

    应该有一些更“优雅”的方式。就像传递参数一样。就像在 servlet 中一样?

    request.getParameter("par1")

提前致谢。

Con*_*Man 1

  1. 在我看来,您可能想看看基于内容的路由器,这是一种由 Camel 实现的企业集成模式。使用语法“choice > when > else”,您基本上可以将“if > else”样式功能添加到骆驼路由中。
  2. 不幸的是,据我所知,没有什么比这更优雅的了。您始终可以提供自己的 util 类/方法来抽象出丑陋的过程:

public class ExchangeHelper{

  public Object getHeader(Exchange exchange, String header){
    return exchange.getIn().getHeader(header, Object.class);
  }

}
Run Code Online (Sandbox Code Playgroud)

我猜是这样的?