我该如何捕获导致Camel故障转移负载均衡器失败的最终异常(例如,准备一个漂亮的(HTTP)响应而不是简单的堆栈跟踪)?
我有类似以下的代码:
from("jetty:http://0.0.0.0:8081/context")
.process(frontendProcessor)
.loadBalance()
.failover(1,
false,
true,
true,
MyFancyException.class)
.to("direct:foo", "direct:bar")
.end()
.process(responseProcessor)
.stop();
使用:
from("direct:foo")
.process(potentiallyThrowingMyFancyException);
(并且对于“direct:bar”也是一样)
没有负载均衡,我会使用
onException
,但我似乎无法理解它如何与负载均衡及其 内部 异常处理相协调。一方面,我想记录堆栈跟踪,在负载均衡期间和另一方面,我想使用 onException
来创建一个漂亮的错误响应 - 最好在同一组件/实现中都有。所以我尝试了这个:onException(Exception.class)
.process(myErrorProcessor)
.handled(true)
.stop();
from("jetty:http://0.0.0.0:8081/context")
.process(frontendProcessor)
.loadBalance()
.failover(1,
false,
true,
true,
MyFancyException.class)
.to("direct:foo", "direct:bar")
.end()
.process(responseProcessor)
.stop();
但是handled(true)
似乎会破坏故障转移,另一方面,我认为当我使用onException
来呈现最终的HTTP错误响应时,这是必要的。
在onException
错误处理器中,如何区分:
触发故障转移的异常,以及
故障转移负载均衡器完全失败,您可能希望为调用者创建一个漂亮的最终错误响应?