如何处理 camel 中的 4xx(无重试)和 5xx(有重试)异常
How to handle 4xx(without retry) and 5xx (with retry) exceptions in camel
我有一个骆驼路线,它发出 API 请求,外部服务可能是 4xx 或 5xx。我已经编写了 HttpOperationFailedException
处理程序来处理所有与 HTTP 相关的异常,并且我正在重试所有 Http 异常,无论是客户端异常还是服务器端异常。我想以某种方式处理它们,我需要避免客户端异常的关系。
这是我的路由和异常代码,看起来像。谁能建议处理这些情况的最佳方法?
onException(HttpOperationFailedException.class)
.handled(true)
.redeliveryDelay(100)
.maximumRedeliveries(2)
.log("${exception} Http Communication Exception while making API request")
.end();
from("direct:start")
.routeId("restApi")
.process(exchange -> exchange.getIn().setBody(
new RequestBody(
"${headers.camelFileName}")))
.marshal()
.json(JsonLibrary.Gson)
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.setHeader("Content-Type",constant("application/json"))
.to(url)
.end();
您可以按照以下方式尝试:
onException(HttpOperationFailedException.class)
.choice()
.when(simple("${exception.getStatusCode()} == '400'"))
//doSomething
.endChoice()
.when(simple("${exception.getStatusCode()} == '500'"))
//doSomething
.otherwise()
//retries
.endChoice()
.end()
;
我有一个骆驼路线,它发出 API 请求,外部服务可能是 4xx 或 5xx。我已经编写了 HttpOperationFailedException
处理程序来处理所有与 HTTP 相关的异常,并且我正在重试所有 Http 异常,无论是客户端异常还是服务器端异常。我想以某种方式处理它们,我需要避免客户端异常的关系。
这是我的路由和异常代码,看起来像。谁能建议处理这些情况的最佳方法?
onException(HttpOperationFailedException.class)
.handled(true)
.redeliveryDelay(100)
.maximumRedeliveries(2)
.log("${exception} Http Communication Exception while making API request")
.end();
from("direct:start")
.routeId("restApi")
.process(exchange -> exchange.getIn().setBody(
new RequestBody(
"${headers.camelFileName}")))
.marshal()
.json(JsonLibrary.Gson)
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.setHeader("Content-Type",constant("application/json"))
.to(url)
.end();
您可以按照以下方式尝试:
onException(HttpOperationFailedException.class)
.choice()
.when(simple("${exception.getStatusCode()} == '400'"))
//doSomething
.endChoice()
.when(simple("${exception.getStatusCode()} == '500'"))
//doSomething
.otherwise()
//retries
.endChoice()
.end()
;