使 WSO2 ESB 迭代调解器同步
Making WSO2 ESB Iterate Mediator Synchronous
下面的标记是我的迭代调解器,它位于 WSO2 ESB 4.9.0 中设置的代理服务中。
我正在尝试遍历一系列表单提交并将它们 POST 转换为也在 ESB 中定义的 RESTful API。然而,即使我使用的是 CALL 调解器,API 日志显示我所有的迭代请求都以毫秒为单位发出 - 这对我来说表明迭代调解器实际上是 运行 我的异步内联目标序列尽管设置了 sequential="true"。
有什么方法可以确保在迭代和提交另一个请求之前完成对我的 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></description>
<return_call></return_call>
<mobile></mobile>
<sub_category></sub_category>
<first_name></first_name>
<last_name></last_name>
<category></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>
我正在使用呼叫调解器,但没有意识到有一个选项可以阻止请求。这解决了并发问题。
编辑
根据下面的评论,这是为我解决问题的呼叫调解员:
<call blocking="true">
<endpoint>
<address uri="http://localhost:8280/crm/request" format="rest"/>
</endpoint>
</call>
奇怪的是,实际上并没有在最新的 WSO2 ESB 调用调解器文档中记录,这有点无益。但是只要在中介配置中寻找相关的下拉菜单 UI 或者直接在源代码中设置上面的选项。
尝试使用 callout[1][2] mediator 而不是 call 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
下面的标记是我的迭代调解器,它位于 WSO2 ESB 4.9.0 中设置的代理服务中。
我正在尝试遍历一系列表单提交并将它们 POST 转换为也在 ESB 中定义的 RESTful API。然而,即使我使用的是 CALL 调解器,API 日志显示我所有的迭代请求都以毫秒为单位发出 - 这对我来说表明迭代调解器实际上是 运行 我的异步内联目标序列尽管设置了 sequential="true"。
有什么方法可以确保在迭代和提交另一个请求之前完成对我的 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></description>
<return_call></return_call>
<mobile></mobile>
<sub_category></sub_category>
<first_name></first_name>
<last_name></last_name>
<category></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>
我正在使用呼叫调解器,但没有意识到有一个选项可以阻止请求。这解决了并发问题。
编辑
根据下面的评论,这是为我解决问题的呼叫调解员:
<call blocking="true">
<endpoint>
<address uri="http://localhost:8280/crm/request" format="rest"/>
</endpoint>
</call>
奇怪的是,实际上并没有在最新的 WSO2 ESB 调用调解器文档中记录,这有点无益。但是只要在中介配置中寻找相关的下拉菜单 UI 或者直接在源代码中设置上面的选项。
尝试使用 callout[1][2] mediator 而不是 call 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