【问题标题】:Making WSO2 ESB Iterate Mediator Synchronous使 WSO2 ESB 迭代中介器同步
【发布时间】:2015-12-01 18:59:44
【问题描述】:

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

我正在尝试遍历一组表单提交并将它们发布到同样在 ESB 中定义的 RESTful API。但是,即使我使用的是 CALL 中介,API 日志显示我所有的迭代请求都在几毫秒内触发 - 这对我来说表明迭代中介实际上正在异步运行我的内联目标序列,尽管设置了 sequential="真实”

有什么方法可以确保在迭代和提交另一个请求之前完成对我的 REST API 的调用?

 <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>

【问题讨论】:

    标签: wso2 wso2esb


    【解决方案1】:

    我正在使用呼叫调解器,但没有意识到可以选择阻止请求。这解决了并发问题。

    编辑
    根据下面的 cmets,这是为我解决问题的呼叫调解员:

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

    奇怪的是,在最新的 WSO2 ESB 调用中介文档中实际上并没有记录,这有点无益。但只需在调解器配置 UI 中查找相关下拉菜单,或直接在源代码中设置上述选项。

    【讨论】:

    • Fellow revieweres:这一个答案,它是 OP 告诉他们是什么解决了它。
    【解决方案2】:

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

    [1] - https://docs.wso2.com/display/ESB490/Callout+Mediator [2] - https://docs.wso2.com/display/ESB490/Sample+430%3A+Callout+Mediator+for+Synchronous+Service+Invocation

    【讨论】:

    • 感谢 Sajith,但需要澄清的是,呼叫调解员也可以被阻止。我已经找到了阻止选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多