WSO2 параллельная обработка - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу скопировать запрос и вызвать 3 бэкэнда параллельно, а затем объединить ответы в один ответ и сохранить его для дальнейшего посредничества. Я понятия не имею, как это сделать, и если это вообще возможно

IЯ попробовал медиатор клонирования и установил continueParent в значение true, но он не ожидает обработки сообщений в клонах и просто пропускает его.

Для этого случая я использовал только пользовательские свойства

<?xml version="1.0" encoding="UTF-8"?>
<api context="/test" name="test" xmlns="http://ws.apache.org/ns/synapse">  
    <resource methods="POST">
        <inSequence>
            <payloadFactory description="test payload" media-type="json">
                <format>{ &#xd;
    "test" : "test"&#xd;
}</format>
                <args/>
            </payloadFactory>
            <clone continueParent="true" id="TEST_ID">
                <target>
                    <sequence>
                        <log>
                            <property name="property_name" value="CLONE1"/>
                        </log>
                        <property name="PROP_1" scope="default" 
type="STRING" value="1"/>
                </sequence>
            </target>
            <target>
                <sequence>
                    <log>
                        <property name="property_name" value="CLONE2"/>
                    </log>
                    <property name="PROP_2" scope="default" type="STRING" value="2"/>
                </sequence>
            </target>
            <target>
                <sequence>
                    <log>
                        <property name="property_name" value="CLONE3"/>
                    </log>
                    <property name="PROP_3" scope="default" type="STRING" value="3"/>
                </sequence>
            </target>
        </clone>
        <payloadFactory media-type="json">
            <format>{&#xd;
"PROP_1" : "$1",&#xd;
"PROP_2" : "$2",&#xd;
"PROP_3" : "$3&#xd;
}</format>
                <args>
                    <arg evaluator="xml" expression="$ctx:PROP_1"/>
                    <arg evaluator="xml" expression="$ctx:PROP_1"/>
                    <arg evaluator="xml" expression="$ctx:PROP_1"/>
                </args>
            </payloadFactory>
            <log level="full"/>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

Ожидаемый результат:

{
    "PROP_1" : "1",
    "PROP_2 : "2",
    "PROP_3" : "3"
}

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать следующий пример API для вызова нескольких бэкэндов и агрегирования ответа.

<api xmlns="http://ws.apache.org/ns/synapse" name="test" context="/test">
   <resource methods="POST">
      <inSequence>
         <clone id="TEST_ID">
            <target>
               <sequence>
                  <log>
                     <property name="CLONE_01" value="BEFORE_CALL"/>
                  </log>
                  <call>
                     <endpoint>
                        <address uri="http://www.mocky.io/v2/5c692f27370000cc0707fcf4" format="get"/>
                     </endpoint>
                  </call>
                  <log level="full">
                     <property name="CLONE_01" value="AFTER_CALL"/>
                  </log>
                  <loopback/>
               </sequence>
            </target>
            <target>
               <sequence>
                  <log>
                     <property name="CLONE_02" value="BEFORE_CALL"/>
                  </log>
                  <call>
                     <endpoint>
                        <address uri="http://www.mocky.io/v2/5c692f35370000cc0a07fcf5" format="get"/>
                     </endpoint>
                  </call>
                  <log level="full">
                     <property name="CLONE_02" value="AFTER_CALL"/>
                  </log>
                  <loopback/>
               </sequence>
            </target>
         </clone>
      </inSequence>
      <outSequence>
         <property name="info" scope="default">
            <Information/>
         </property>
         <aggregate>
            <completeCondition>
               <messageCount min="2" max="-1"/>
            </completeCondition>
            <onComplete expression="$body/*[1]" enclosingElementProperty="info">
               <send/>
            </onComplete>
         </aggregate>
      </outSequence>
      <faultSequence/>
   </resource>
</api>

Это будет выводом этого.

{"Information":[{"EP":"01"},{"EP":"02"}]}

Вы можете сослаться на это [1] статья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...