Camel Apache:我可以使用retryWhile重新发送请求吗



我想用CAMEL实现以下类型的编排:

  1. 客户端向CAMEL发送HTTP POST请求
  2. CAMEL向外部端点(服务器)发送HTTP POST请求
  3. 外部服务器回复200 OK
  4. CAMEL向外部端点(服务器)发送HTTP GET请求
  5. 外部服务器答复

在步骤5之后,我想检查回复:如果回复是200 OK,并且state=INPROGRESS(该状态可以从接收的XML主体中检索),我想将HTTP GET重新传输到外部端点,直到状态与INPROGRESS。

我想使用retryWhile语句,但我不确定如何在路由中构建例程。例如,为了检查回复是否是200 OK和state=INPROGRESS,我可以很容易地引入谓词。所以重试While已经变成:

.retryWhile(Is200OK和INPROGRESS)

但是我应该把它放在路由中的哪里,以便重新传输HTTP GET?

例如:(只考虑步骤4和5)

from("...")
  // here format the message to be sent out
  .to("external_server")
      // what code should I write here ??
      // something like: 
      //     .onException(alwaysDo.class)
      //         .retryWhile(Is200OKandINPROGRESS)
      //         .delay(2000)
      //     .end ()
      // or maybe it should not be here ??

我也有点困惑"alwaysDo.class"应该是什么样子??或我应该使用完全不同的方法来解决这个编排吗?(我只想重新传输,只要我在INPROGRESS状态下得到200 OK…)

提前感谢您的帮助。

在CAMEL Nabble上,有人回答了我的问题。结账:

http://camel.465427.n5.nabble.com/Camel-Apache-can-I-use-a-retryWhile-to-re-send-a-request-td5498382.html

通过使用循环语句,我可以重新传输HTTPGET请求,直到收到与INPROGRESS不同的状态。需要使用选择语句将状态检查放入循环语句中。所以类似于:

   .loop(60)
       .choice()
       .when(not(Is200OKandINPROGRESS)).stop()  // if state is not INPROGRESS, then stop the loop
   .end() // choice
       .log("Received an INPROGRESS reply on QueryTransaction ... retrying in 5 seconds")
       .delay(5000)
       .to(httpendpoint")   
    .end() //loop

我从未尝试过你想要做的事情,但似乎并不正确。在您显示的代码中,只有在抛出alwaysDo异常时才会进行重试。

您所引用的alwaysDo.class应该是您期望处理的Java Exception类的名称。看见http://camel.apache.org/exception-clause.html了解更多详细信息。

其想法应该是进行调用并检查响应内容,然后基于state属性执行CBR。再次调用GET或终止/继续路由。

您可能应该向ApacheCamel邮件列表(或通过Nabble)写一条消息。委员们正在关注此事,反应非常积极。

相关内容

  • 没有找到相关文章

最新更新