仅从负载均衡器处理异常一次(当故障转移耗尽时)

时间:2016-05-12 18:31:03

标签: apache-camel

我的代码使用jms队列并通过lb重定向到外部http客户端。 我需要将每个失败的传递的原始邮件记录到本地目录。 问题是每次故障转移都会捕获onException。 有什么方法可以实现这个目标吗?

伪代码:

onException(Exception.class).useOriginalMessage()
    .setHeader(...)
    .to("file...")
    .setHeader(...)
    .to("file...")

from("activemq...")
    .process(...)
    .loadBalance().failover(...)
        .to("lb-route1")
        .to("lb-route2")
    .end()
    .process()
    .to("file...")

from("lb-route1")
    .recipientList("dynamic url")
.end()

from("lb-route2")
    .recipientList("dynamic url")
.end()

1 个答案:

答案 0 :(得分:0)

我没有用多个to语句测试这个逻辑,但是当我在数组中有我的端点列表时,这个逻辑功能就好了。我将尝试传递到第一个端点,如果我不能,我将尝试将其传递到第二个端点。如果在第二个端点发生异常,它将传播回路由的错误处理程序。如果您需要循环,请将故障转移语句上的最后一个false更改为true。

String[] endpointList = {"direct:end1", "direct:end2"};

from("direct:start")
    .loadbalance().failover(endpointList.length-1, false, false)
    .to(endpointList);