您好我有一个场景,我只需要发送一个请求(可以是代理URL),它可以调用多个端点并在聚合所有端点后返回响应。
目前我正在使用代理服务实现来实现它,但只返回一个响应(可以来自任何端点),并且无法组合来自其他系统/端点的响应。虽然我可以从服务器控制台中的另一个端点做出响应。
以下是我目前实施的代码:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="RLProxy"
transports="http,https"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<clone>
<target>
<sequence>
<property name="Authorization"
value="Basic username:password"
scope="transport"/>
<property name="messageType"
value="application/json"
scope="axis2"
type="STRING"/>
<send>
<endpoint>
<address uri="http://localhost:7070/adap/cn=AlkaA,ou=People,dc=maxcrc,dc=com"/>
</endpoint>
</send>
</sequence>
</target>
<target>
<sequence>
<property name="Authorization"
value="Basic username:password"
scope="transport"/>
<property name="messageType"
value="application/json"
scope="axis2"
type="STRING"/>
<send>
<endpoint>
<address uri="http://localhost:7070/adap/cn=AlkaV,ou=People,dc=maxcrc,dc=com"/>
</endpoint>
</send>
</sequence>
</target>
</clone>
<aggregate>
<completeCondition>
<messageCount min="3"/>
</completeCondition>
<onComplete expression="$body/jsonObject">
<send/>
</onComplete>
</aggregate>
</inSequence>
</target>
<description/>
</proxy>
我猜测聚合表达式存在一些问题。我不知道它是如何运作的。请帮我。如果还有其他问题请告诉我如何修复它。现在我只测试一个具有相同系统端点的方案,这些方案具有不同的LDAP搜索,但我需要为不同类型的系统实现它。我坚持了很多天。 请帮忙。
答案 0 :(得分:1)
您已将聚合调解器放在inSequence中。但是,它必须放在outSequence中。那是来自后端请求的响应到达的地方。
此外,如果您只调用两个端点,那么在聚合到3之前让最小消息计数等待是不正确的。
请参阅以下文档和样本以了解聚合介体。
https://docs.wso2.com/display/ESB490/Aggregate+Mediator
https://docs.wso2.com/display/ESB490/Sample+400%3A+Message+Splitting+and+Aggregating+the+Responses