我想用CAMEL实现以下类型的编排:
在第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”应该是什么样子? 或者......我应该使用完全不同的东西来解决这个编排吗? (只要我在INPROGRESS状态下获得200 OK,我只想重新传输......)
提前感谢您的帮助。
答案 0 :(得分:2)
在CAMEL Nabble,有人回答了我的问题。退房:
通过使用循环语句,我可以重新发送HTTP GET请求,直到我收到与INPROGRESS不同的状态。需要使用choice语句将对状态的检查放在循环语句中。如下所示:
.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
答案 1 :(得分:0)
我从未尝试过你想要做的事,但似乎似乎并不正确。 在您显示的代码中,重试仅在抛出alwaysDo异常时发生。
您要引用的alwaysDo.class应该是您希望处理的Java Exception类的名称。有关详细信息,请参阅http://camel.apache.org/exception-clause.html。
想法应该是进行调用并检查响应内容,然后根据状态属性执行CBR。再次呼叫GET或终止/继续路线。
答案 2 :(得分:0)
您可能应该向the Apache Camel mailing list(或通过Nabble)发送消息。 Commiters正在观看它并且非常反应。