我使用Apache Camel(2.15.x)HTTP4组件并点击外部Web服务。有时,回复为200
,有时为422
,有时为500
。对于200
,我很好。我的问题是,当我得到500
时我想重试,但是当我得到422
时我想重试。在这两种情况下,它都是HttpOperationFailedException
。我查看了Camel文档和Google搜索,但是我没有找到任何如何执行此操作的示例。任何建议或网址都将不胜感激。
感谢。
答案 0 :(得分:2)
你可以将它全部包装在类似于普通java的try catch表达式中,并使用Camel dsl来完成。
.doTry()
.to("your_http_endpoint")
.doCatch(HttpOperationFailedException.class)
.choice()
.when(header(HTTP_RESPONSE_CODE).isEqualTo("500"))
.to("do your retry or whatever you want to do")
.otherwise()
.to("somewhere_else when its not 500")
.end();
答案 1 :(得分:0)
以下是我在你的场景中会做的事情。在Processor
之后立即在路线定义中实施自定义HTTP4
。这将允许您检查响应,更重要的是检查响应状态代码。之后,您可以根据状态代码定义如何继续。
像这样(半伪):
from("http4://SOME_URL").process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message out = exchange.getOut();
int responseCode = out.getHeader(HttpProducer.HTTP_RESPONSE_CODE, Integer.class);
//HERE DECIDE WHAT TO DO BASED ON YOUR RESPONSE CODE!
}
}).to("some_other_endpoint");
查看"获取响应代码" here
答案 2 :(得分:0)
我认为你要找的是MessageRouter模式。骆驼DSL提供了一个“选择”,允许'何时' - >'到'和'否则' - >'到',我认为这足以满足您的需求。