以下标记是我的迭代介体,它位于WSO2 ESB 4.9.0中设置的代理服务中。
我试图遍历表单提交数组并将它们发布到ESB中定义的RESTful API中。但是,即使我使用CALL介体,API日志显示我的所有迭代请求都相隔毫秒 - 这对我来说表明迭代介体实际上是异步运行我的内联目标序列,尽管设置顺序="真" 即可。
在迭代和提交其他请求之前,有没有办法确保对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>
答案 0 :(得分:3)
我正在使用呼叫中介,并没有意识到有一个选项可以阻止请求。这解决了并发问题。
修改强>
根据下面的评论,这是呼叫调解员为我解决了这个问题:
<call blocking="true">
<endpoint>
<address uri="http://localhost:8280/crm/request" format="rest"/>
</endpoint>
</call>
奇怪的是,这个实际上并未记录在最新的WSO2 ESB文档中,对于调用介体来说,这有点无益。但只需在介体配置UI中查找相关的下拉菜单,或者直接在源代码中直接设置选项。
答案 1 :(得分:1)
尝试使用callout [1] [2] mediator而不是call mediator。 Callout mediator将阻止外部服务调用。请注意,阻止服务调用的使用可能会影响性能。
[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