我想实现以下种类配器与CAMEL:骆驼Apache:我可以使用retryWhile重新发送请求吗?
- 客户端发送一个HTTP POST请求骆驼
- CAMEL发送HTTP POST请求外部端点(服务器)
- 外部服务器回复一个200 OK
- CAMEL发送HTTP GET请求到外部端点(服务器)
- 外部服务器回复
在步骤5之后,我想检查回复:如果回复是200 OK并且state = INPROGRESS(该状态可以从接收到的XML主体中检索),那么我想要将HTTP GET重新传输到外部端点直到状态与INPROGRESS不同。
我想使用retryWhile语句,但我不知道如何在路由中构建例程。 例如,为了检查答复是否为200 OK并且state = INPROGRESS,我可以很容易地引入一个谓词。所以retryWhile已经变得像:
.retryWhile(Is200OKandINPROGRESS)
,但我应该在哪里把它的路由,这样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”应该怎么样子? 或...我应该使用完全不同的东西来解决这种编排问题吗? (我只是想重新发送,只要我得到一个200 OK与INPROGRESS状态...)
在此先感谢您的帮助。
实际上,当你使用.stop()时,它会停止wh ole路线,这可能是不希望的。成像是这样的: '从( “直接:富”)。为了 ( “直接:嘘”) .process(someProcessor());' '从( “直接:嘘”) .loop( 100) .choice() 。当(stopPredicate())停止() .END() .END() .process(someOtherProcessor());' 的.stop()将导致,即someProcessor()和someOtherProcessor()将不会被调用。这可能是不可取的。 – Slimer 2014-11-12 14:26:48