如何采取基于HTTP响应代码不同的动作,与Apache骆驼

问题描述 投票:0回答:3

我使用Apache的骆驼的(2.15.x)HTTP4组件和击球外部Web服务。有时反应是200,有时他们是422,有时他们是500。对于200s,我很好。我的问题是,我想,当我得到的500但不是当我得到的422重试。在这两种情况下,这是一个HttpOperationFailedException。我看了看骆驼的文档和谷歌搜索,但我还没有找到如何做到这一点的任何例子。任何意见或网址,将不胜感激。

谢谢。

java apache-camel
3个回答
3
投票

你可以用这一切在类似普通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();

1
投票

以下是我会在你的情况下做的。实现自定义的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


1
投票

我知道你在寻找的是一个MessageRouter模式。骆驼DSL提供一个“选择”允许“当” - >“到”和“否则” - >“到”我认为这将足以满足你在找什么。

© www.soinside.com 2019 - 2024. All rights reserved.