如何独家发送到Camel路线?

时间:2017-01-13 11:00:28

标签: java apache-camel

public class MyRoute extends RouteBuilder {

  @Override
  public void configure() {
    from("servlet://myservlet")
      .multicast()
        .parallelProcessing().recipientList(bean(this))
      .end();
  }

  @RecipientList
  public List<String> route(String body) {
    return getContext().getRouteDefinitions().stream()
      .filter(i -> i.getStatus(getContext()).isStarted() && i.getId().startsWith("FOO"))
      .map(OptionalIdentifiedDefinition::getId)
      .collect(toList());
  }
}

当我调试时,我看到getContext().getRouteDefinitions()为空,即使路由实际已启动。我做错了什么?

1 个答案:

答案 0 :(得分:0)

RomanVottner通过建议使用交换中的上下文并使用ProducerTemplate提供了大量见解。这就是我最终得到的结果:

from("servlet://my-endpoint")
  .process(exchange -> {
    ProducerTemplate template = exchange.getContext().createProducerTemplate();

    exchange.getContext().getRouteDefinitions().stream()
      .filter(routeDef -> 
              routeDef.getStatus(getContext()).isStarted() && i.getId().startsWith("FOO"))
      .map(OptionalIdentifiedDefinition::getId)
      .forEach(endpoint ->
               template.asyncSendBody(endpoint, exchange.getIn().getBody()));
  });

编辑:警告!在生产中使用asyncSendBody之后,机器很快就退出了PID。我必须弄清楚为什么Camel不会释放它们......