拦截骆驼交换

时间:2014-11-12 03:50:52

标签: apache-camel camel-ftp

假设我的路线如下

from("direct:A")
  .process(new ProcessA())
  .setHeader(Exchange.HTTP_METHOD, "get")
  .recipientList( simple(httpUri + header("doc_id")), "false")
  .process(new ProcessB())
  .to("direct:B");

在上面的路径中httpUri =“http4:// localhost:25600”。现在我试图拦截消息如下。

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
    @Override
    public void configure() throws Exception {
         interceptSendToEndpoint("http4*")
         .skipSendToOriginalEndpoint()
         .process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
               //TODO                                 
            }
         });
    }
});

这里的问题是交换没有被截获,并且上下文实际上正在尝试与httpUri主机建立连接,即使有skipSendToOriginalEndpoint。

如果代码中有任何错误,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您正在使用动态路由,这意味着在定义时不知道端点。因此,您无法根据http端点进行拦截。

我要做的是换掉整个recipientList,而不仅仅是receiveList调用的http目标。

使用weaveByType执行此操作的简单方法。要在处理器中编织,这看起来像:

weaveByType(RecipientListDefinition.class).replace().process(...)

与使用adviceWith一样,确保实现isUseAdviceWith以返回true,然后在建议routeDefinition之后调用context.start()