gpt4 book ai didi

apache-camel - 更改编织语句的顺序时,CameladviceWith 的行为有所不同

转载 作者:行者123 更新时间:2023-12-04 01:08:06 24 4
gpt4 key购买 nike

我有以下路线用于演示目的

from("direct:external")
.routeId("external")
.to("http4://www.third-party.com/foo").id("ext");

为了测试,我想
* 将 http4: 端点替换为直接:端点
* 在路由末尾添加一个 mock: endpoint 以进行验证

我添加了以下建议WithRouteBuilder
context.getRouteDefinition("external").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveAddLast().to("mock:result");
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
}
});

这个似乎有效,但如果我改变 weave* 的顺序声明,像这样
public void configure() throws Exception {
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
weaveAddLast().to("mock:result");
}

它给了我以下错误

java.lang.IllegalArgumentException: There are no outputs which matches: * in the route: Route(external)[[From[direct:external]] -> [pipeline -> [[To[direct:foo]]]]]



我实际上希望得到相同的结果,而与顺序无关。

最佳答案

这里要注意的一件事是 weave*调用只知道原始的 RouteBuilder。所以当你执行 weaveByUri()先调用,它替换 .to("http4://www.third-party.com/foo").to("direct:foo") ,顺便说一句,它恰好是您 route 的最后一个端点。现在,当您执行 weaveAddLast() 时调用,它寻找 "http4://www.third-party.com/foo"但没有找到,因为它被 "direct:foo" 取代了.这会导致抛出异常。

因此,如果假设在 "http4..." 之后还有另一个端点端点,使其不再是您 route 的最后一个端点,您的 adviceWith()应该管用。例如,如果您的原始路线如下所示,它将起作用:

from("direct://external")
.routeId("external")
.to("http4://www.third-party.com/foo")
.id("ext")
.to("direct://bar")
;

我应该注意,我认为这是一个错误,顺序无关紧要。

关于apache-camel - 更改编织语句的顺序时,CameladviceWith 的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com