未触发Camel路由特定的onException

0ve6wy6x  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(94)

下面是代码:

<route id="StartMyRoute">
      <from uri="direct:StartMyRoute"/>
      <to uri="direct:myRoute2"/>
      <onException>
        <exception>SpecificException</exception>
            <to uri="direct:myRoute3"/>
      </onException>
    </route>

我在Java DSL中尝试了同样的方法:

from("direct:StartMyRoute")
                .routeId("StartMyRoute")
                .to("direct:myRoute2")
                .onException(SpecificException.class)
                .to("direct:myRoute3");

这不起作用,但后来我在全局范围内尝试了onException,它起作用了。我有一些路由特定的功能,应该在onException(...)处理程序中执行,所以我不能使用全局范围。
下面是我的代码,它具有全局范围:

onException(SpecificException.class)
                .to("direct:myRoute3");

    from("direct:StartMyRoute")
                .routeId("StartMyRoute")
                .to("direct:myRoute2");

有人能帮助我理解为什么特定于路由的onException(...)没有被触发吗?

vxbzzdmp

vxbzzdmp1#

让此解决方案发挥作用:

from("direct:StartMyRoute")
    .routeId("StartMyRoute")
    .onException(SpecificException.class)
    .to("direct:myRoute3")
    .end
    .to("direct:myRoute2");
ma8fv8wu

ma8fv8wu2#

在一般情况下你可以捕获所有异常(过滤if条件)

onException(Exception.class)
  .process(new Processor() {
    public void process(Exchange exchange) throws Exception {
        if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) instanceof SpecialException.class) {
            // TODO something...
        }
    }).handled(true);

相关问题