0

假设我的路线如下

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。

请让我知道代码中是否有任何问题。提前致谢。

4

1 回答 1

0

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

我要做的是换出整个收件人列表,而不仅仅是收件人列表调用的 http 目标。

使用weaveByType的简单方法。在你的处理器中编织,这看起来像:

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

与adviceWith 一样,确保实现isUseAdviceWithreturn true,然后context.start()在通知routeDefinition 后调用。

于 2014-11-12T19:46:55.870 回答