WSO2 ESB:如何使Iterate介体在发送下一个请求之前等待响应

时间:2012-10-06 02:18:31

标签: wso2 wso2esb esb

让Iterate介体工作并将其调用到另一个外部端点我没有什么问题。然而,在我看来(通过记录),无论我是否将Sequencing设置为True或False,ESB都会相当快地发出所有请求。这个快速请求发送似乎导致我的端点所指向的外部Web服务出现问题。如果我在xml中有1项让Iterate工作,一切都很好。但是如果我迭代2个或更多,我会遇到各种错误。

这就是为什么我想知道无论如何我可以让Iterate中介调用这个外部端点,等待响应,然后用下一个请求调用外部端点。如何使用WSO2 ESB实现这一目标?

如果我必须使用代码,我会将请求放在一个数组中,并设置一个具有数组大小的计数器。然后我将从数组中获取第一项并调用Web服务。当响应返回时,我会先将它放在结果数组中。将计数器增加1.然后检查请求数组中是否有更多项目,如果是,则进行下一次调用。

3 个答案:

答案 0 :(得分:0)

我认为您可以使用Flag变量(属性介体):

我会在Insquence中添加一个名为STATUS的属性中介设置为“request_iterate”,稍后在OutSequence中你可以创建一个Switch Mediator,其中第一个案例匹配“request_iterate”和一个调用端点的Send中介,在它设置之后属性('STATUS')到“response_iterate”。案例2将匹配“response_iterate”并执行响应后您必须执行的任何操作。

如果您遇到计时问题,可以使用消息存储库和消息处理器实现限制方案。

注意:消息模式通常用于异步操作

希望这个帮助

答案 1 :(得分:0)

尝试在调用中介中使用 blocking =“true”属性,如下所示,

<call blocking="true">
 <endpoint key="yourEndpointName"/>
</call>

这应该可以解决问题。

谢谢,希望这有帮助

答案 2 :(得分:0)

我认为您可以使用“call out”介体或使用“Call”介体将阻塞模式设置为true。 有关更多信息,请参阅以下链接: https://docs.wso2.com/display/ESB490/Call+Mediator