我使用Apache的骆驼的(2.15.x)HTTP4组件和击球外部Web服务。有时反应是200
,有时他们是422
,有时他们是500
。对于200
s,我很好。我的问题是,我想,当我得到的500
但不是当我得到的422
重试。在这两种情况下,这是一个HttpOperationFailedException
。我看了看骆驼的文档和谷歌搜索,但我还没有找到如何做到这一点的任何例子。任何意见或网址,将不胜感激。
谢谢。
你可以用这一切在类似普通Java一试捕的表达,并与骆驼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();
以下是我会在你的情况下做的。实现自定义的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
我知道你在寻找的是一个MessageRouter模式。骆驼DSL提供一个“选择”允许“当” - >“到”和“否则” - >“到”我认为这将足以满足你在找什么。