发送单个请求以在WSO2 ESB中调用不同的系统

时间:2016-06-10 10:48:43

标签: wso2 aggregate esb

您好我有一个场景,我只需要发送一个请求(可以是代理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搜索,但我需要为不同类型的系统实现它。我坚持了很多天。 请帮忙。

1 个答案:

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