如何使用Apache Camel基于HTTP响应代码采取不同的操作

时间:2016-11-07 16:36:11

标签: java apache-camel

我使用Apache Camel(2.15.x)HTTP4组件并点击外部Web服务。有时,回复为200,有时为422,有时为500。对于200,我很好。我的问题是,当我得到500时我想重试,但是当我得到422时我想重试。在这两种情况下,它都是HttpOperationFailedException。我查看了Camel文档和Google搜索,但是我没有找到任何如何执行此操作的示例。任何建议或网址都将不胜感激。

感谢。

3 个答案:

答案 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提供了一个“选择”,允许'何时' - >'到'和'否则' - >'到',我认为这足以满足您的需求。