在单个camel路由中,我有两个url调用,调用两个不同的应用程序。
to("http://datasource1/data)
//some process
to("http://datasource2/data)
//some process
两者都能投掷UnKnowHostException
。
因此,如果URL1抛出异常,我必须处理并将交换体设置为“数据源1不可用”,如果URL2抛出相同的异常,我想显示不同的消息。
如何使用 onException
处理此问题答案 0 :(得分:2)
您可以使用onWhen
。在每个请求之前设置一些标题(在我的示例中为#34; httpDatasource"),并在使用不同的处理程序之后。
onException(UnKnowHostException.class).onWhen(header("httpDatasource").isEqualTo("1")).to("...");
onException(UnKnowHostException.class).onWhen(header("httpDatasource").isEqualTo("2")).to("...");
.....
setHeader("httpDatasource").constant("1")
to("http://datasource1/data)
//some process
setHeader("httpDatasource").constant("2")
to("http://datasource2/data)
//some process
答案 1 :(得分:1)
我会使用驼峰try catch
块(由@soilworker建议)。
.doTry()
.to("http://datasource1/data")
.doCatch(UnknownHostException.class)
// Add message 1 here
.end()
//process
.doTry()
.to("http://datasource2/data")
.doCatch(UnknownHostException.class)
// Add message 2 here
.end()
// process
它更详细,但它易于理解,并清楚地将消息与异常相关联。如果你想让to
调用异步,你可以。
您可以使用特定路线onException
,但您需要将路线分成多条路线:
from("somewhere")
.to("direct:datasource1")
//process
.to("direct:datasource2")
//process
from("direct:datasource1")
.onException(UnknownHostException.class)
// add message 1 here
.end()
.to("http://datasource/data")
from("direct:datasource2")
.onException(UnknownHostException.class)
// add message 2 here
.end()
.to("http://datasource2/data")
我不相信可以使用onException
使用一条路线,但应用于不同的to
来电(除了使用@Alexeys或@Ewouts建议)。如果有的话,我很乐意听到它。