使WSO2 ESB迭代中介同步

使WSO2 ESB迭代中介同步,wso2,wso2esb,Wso2,Wso2esb,下面的标记是我的迭代中介,它位于WSO2 ESB 4.9.0中设置的代理服务内 我试图循环遍历表单提交的数组,并将它们发布到ESB中定义的RESTful API中。然而,即使我正在使用调用中介,API日志显示我的所有迭代请求都是以毫秒为间隔触发的——这对我来说表明,尽管设置了sequential=“true”,迭代中介实际上是异步运行我的内联目标序列 有没有办法确保对我的RESTAPI的调用在迭代和提交另一个请求之前完成 <iterate continueParent="true"

下面的标记是我的迭代中介,它位于WSO2 ESB 4.9.0中设置的代理服务内

我试图循环遍历表单提交的数组,并将它们发布到ESB中定义的RESTful API中。然而,即使我正在使用调用中介,API日志显示我的所有迭代请求都是以毫秒为间隔触发的——这对我来说表明,尽管设置了sequential=“true”,迭代中介实际上是异步运行我的内联目标序列

有没有办法确保对我的RESTAPI的调用在迭代和提交另一个请求之前完成

 <iterate continueParent="true"
          id="IterateRequestSink"
          expression="//*[local-name()='Submission']"
          sequential="true">
    <target>
       <sequence>
          <property name="DISABLE_CHUNKING"
                    value="true"
                    scope="axis2"
                    type="STRING"/>
          <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
          <payloadFactory media-type="xml">
             <format>
                <params xmlns="">
                   <description>$1</description>
                   <return_call>$2</return_call>
                   <mobile>$3</mobile>
                   <sub_category>$4</sub_category>
                   <first_name>$5</first_name>
                   <last_name>$6</last_name>
                   <category>$7</category>
                </params>
             </format>
             <args>
                <arg evaluator="xml" expression="//*[local-name()='description']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='return_call']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='mobile']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='sub_category']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='first_name']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='last_name']/text()"/>
                <arg evaluator="xml" expression="//*[local-name()='category']/text()"/>
             </args>
          </payloadFactory>
          <property name="messageType"
                    value="application/x-www-form-urlencoded"
                    scope="axis2"
                    type="STRING"/>
          <call>
             <endpoint>
                <address uri="http://localhost:8280/crm/request" format="rest"/>
             </endpoint>
          </call>
          <log level="full"/>
       </sequence>
    </target>
 </iterate>

$1
$2
$3
$4
$5
$6
$7

我当时正在使用呼叫中介,没有意识到有一个选项可以阻止请求。这解决了并发性问题

编辑
根据以下评论,这是为我解决问题的呼叫调解人:

<call blocking="true">
  <endpoint>
    <address uri="http://localhost:8280/crm/request" format="rest"/>
  </endpoint>
</call>


奇怪的是,在最新的WSO2 ESB调用中介文档中,这个实际上没有被记录下来,这有点没有帮助。但是,只要在mediator配置UI中查找相关下拉列表,或者直接在源中设置上述选项。

尝试使用callout[1][2]mediator而不是call mediator。调出中介将阻止外部服务调用。请注意,使用阻塞服务调用可能会影响性能

[1] -
[2] -

谢谢Sajith,但为了澄清,也可以让呼叫调解人阻止。我已经找到了阻止选项。同行评论员:这是一个答案,是OP告诉他们是什么解决了这个问题。