xml - WSO2 EI 发送对象从一个端点一一响应到另一个端点
问题描述
我是 WSO2 EI 的新手,正在尝试从端点获取数据并将响应对象的每个对象发送到另一个端点。对于下一步,如果可以完成,我想向用户显示一个进度条,以了解流程是如何进行的。
在通过 github 和 stackoverflow 阅读和搜索 WSO2 文档和示例后,找不到任何完整的示例来展示如何完全执行此过程。
作为我使用 Integration Studio 完成的工作示例,这是一个 API,它调用端点从 server1 获取数据,然后调用第二个端点将响应的数据发送到 server2,它工作正常。
<?xml version="1.0" encoding="UTF-8"?>
<api context="/Product/UpdatePrice" name="ProductUpdatePrice" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" url-mapping="/All">
<inSequence>
<call>
<endpoint name="HTTPEndpoint">
<http method="get" uri-template="https://server1/api/Goods/GetPrices">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>1</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
<log level="custom">
<property expression="json-eval($.message)" name="test"/>
</log>
<script language="nashornJs"><![CDATA[payload = mc.getPayloadJSON();
var res = payload.response;
mc.setPayloadJSON(res);]]></script>
<call>
<endpoint name="HTTPEndpoint">
<http method="post" uri-template="https://server2/api/Product/UpdateAllPrices">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>1</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
在此示例中,从 server1 响应的产品价格将发送到 server2 以更新那里的数据库。
我想要的是使用迭代调用 server2 API 来一个一个地发送 server1 响应的对象。
正如我在搜索中发现的那样,似乎我必须使用如下迭代,但不知道在我的示例中我必须在哪里使用它。
<iterate attachPath="json-eval($.categories)" expression="json-eval($.categories)" id="iterate-over-cats" preservePayload="true">
<target>
<sequence>
<send>
<endpoint>
<http method="post" uri-template="https://server2/api/Product/UpdatePrice">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>1</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</send>
</sequence>
</target>
</iterate>
任何想法将不胜感激。
解决方案
假设 Server1 返回一个对象列表,您的解决方案已经使用建议的迭代器完成,您可以将它放在您当前在示例中调用的位置。根据您是否希望流程在迭代后继续,您必须在其之后添加聚合中介。[1] 我用调用替换了发送,否则迭代器响应将在 outSequence 中结束。
<?xml version="1.0" encoding="UTF-8"?>
<api context="/Product/UpdatePrice" name="ProductUpdatePrice" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" url-mapping="/All">
<inSequence>
<call>
<endpoint name="HTTPEndpoint">
<http method="get" uri-template="https://server1/api/Goods/GetPrices">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>1</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
<log level="custom">
<property expression="json-eval($.message)" name="test"/>
</log>
<script language="nashornJs"><![CDATA[payload = mc.getPayloadJSON();
var res = payload.response;
mc.setPayloadJSON(res);]]></script>
<iterate attachPath="json-eval($.categories)" expression="json-eval($.categories)" id="iterate-over-cats" preservePayload="true">
<target>
<sequence>
<call>
<endpoint>
<http method="post" uri-template="https://server2/api/Product/UpdatePrice">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>1</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
</sequence>
</target>
</iterate>
<!-- Basic aggregate here to correctly exit the iterate mediator -->
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
推荐阅读
- python - 如何在 TensorFlow 中对自定义损失函数中的张量进行归一化?
- java - 使用 setTextValidation 在 EditText 上的正则表达式模式无法正常工作
- google-apps-script - 通过 App Script 在 Google Sheets 中设置原始值
- angular - Nativescript-angular post request pipe(map()) 不返回任何内容,不抛出错误
- javascript - 表单提交成功后如何在不重新加载页面的情况下弹出消息?
- python - k个连续字符串中最长的
- java - 迁移到 Java9+ 时,我应该在现有的 Maven 多模块 Web 项目中使用 Java 模块化吗?
- laravel - 在 Laravel 中访问不同模型的属性
- html - 如何在不影响其内容的情况下调整元素的宽度
- javascript - 如何在 node.js 中循环请求