如何捕获导致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();
Run Code Online (Sandbox Code Playgroud)
有:
from("direct:foo")
.process(potentiallyThrowingMyFancyException);
Run Code Online (Sandbox Code Playgroud)
(对于"direct:bar"完全相同)
如果没有负载平衡,我会继续使用,onException但我似乎无法理解它如何与负载均衡器及其内部异常处理很好地协同工作.一方面,我想记录堆栈跟踪DURING负载平衡,另一方面我想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();
Run Code Online (Sandbox Code Playgroud)
但handled(true)似乎打破了故障转移,而另一方面,我认为当我onException用于渲染最终的HTTP错误响应时,它是必要的.
如何区分onException错误处理器:
发生异常,触发故障转移,和
故障转移负载均衡器完全失败,您可能想为调用者创建一个不错的最终错误响应?