假设我的路线如下
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。
如果代码中有任何错误,请告诉我。提前谢谢。
答案 0 :(得分:0)
您正在使用动态路由,这意味着在定义时不知道端点。因此,您无法根据http端点进行拦截。
我要做的是换掉整个recipientList,而不仅仅是receiveList调用的http目标。
使用weaveByType执行此操作的简单方法。要在处理器中编织,这看起来像:
weaveByType(RecipientListDefinition.class).replace().process(...)
与使用adviceWith一样,确保实现isUseAdviceWith
以返回true
,然后在建议routeDefinition之后调用context.start()
。