【发布时间】:2018-04-09 11:58:52
【问题描述】:
如何捕获导致 Camel 故障转移负载平衡器失败的 final 异常(例如,准备好 (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,但我似乎无法理解它如何与负载平衡器及其内部异常处理完美配合。一方面,我想记录堆栈跟踪 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();
但handled(true) 似乎中断了故障转移,而另一方面,我认为当我使用onException 呈现最终的 HTTP 错误响应时这是必要的。
如何在onException 错误处理器中区分:
发生触发故障转移的异常,并且
故障转移负载平衡器完全失败,您可能想为调用者创建一个很好的final错误响应?
【问题讨论】:
标签: java apache-camel