Почему WSO2 отправляет посредник не ждет ответа?

StackOverflow https://stackoverflow.com//questions/21028519

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть прокси WSO2 ESB-4.6.0, который вызывает еще один прокси, который вызывает веб-сервис.

Proxy1 --> Proxy2 --> Endpoint
.

Если я напрямую вызову второй прокси через SOAPUI, ответ правильно возвращается и напечатан, но если я позвоню первым прокси, то возвращается пустое тело.






В журнале ESB противопотребление Proxy1 печатается до выхода прокси2. Похоже, что отправка посредника, присутствующая в последнем случае Proxy1, делает асинхронный вызов прокси2.

Я пытался заменить отправку посредника по медиатору выноска, но результат такой же.
Follow это Учебник, но он тоже не работает.

Как переслать ответ на прокси2 к абонеру?

Пожалуйста помоги. Это убивает меня!

Редактировать

проблема решена! Я использовал неправильный порт, чтобы указать параметр ServiceUrl для медиатора на вынос.

Редактировать

Текущие конфигурации прокси:

Proxy1 (вызова прокси 2 - ManageWorkforce):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="GetAppointmentSchedulePortalReqCS" transports="http https" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentSchedulePortalReqCS_Request.xsl"/>
            <header name="Action" value="getAppointment"/>
            <send>
                <endpoint>
                    <address uri="https://localhost:9443/services/ManageWorkforce"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentSchedulePortalReqCS_Response.xsl"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
    <publishWSDL key="conf:ManageWorkforce/GetAppointmentSchedulePortalReqCS.wsdl" />
</proxy>
.

Прокси 2 (вызов Proxy3-getAppointmentPeopleProvcs):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="ManageWorkforce" transports="https http" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <switch source="get-property('Action')">
                <case regex="getAppointment">
                    <callout serviceURL="https://localhost:8243/services/GetAppointmentPeopleProvCS" action="getAppointment">
                        <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
                        <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
                    </callout>
                </case>
                <!-- another cases -->
                <default/>
            </switch>
            <property name="RESPONSE" value="true" scope="default" type="STRING"/>
            <header name="To" action="remove"/>
            <send/>
        </inSequence>
        <outSequence>
            <drop/>
        </outSequence>
        <faultSequence/>
    </target>
    <publishWSDL key="conf:ManageWorkforce/ManageWorkforce.wsdl"/>
    </publishWSDL>
</proxy>
.

Proxy 3 (вызов сервисному устройству):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="GetAppointmentPeopleProvCS" transports="http https" serviceGroup="" startOnLoad="true" trace="disable">
    <target>
        <endpoint key="GetAppointment"/>
        <inSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentPeopleProvCS_Request.xsl"/>
        </inSequence>
        <outSequence>
            <xslt key="conf:ManageWorkforce/xslt/GetAppointmentPeopleProvCS_Response.xsl"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
</proxy>
.

Последняя конечная точка (сервис):

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="GetAppointment">
    <address uri="http://10.13.6.75:9764/services/GetAppointment" />
</endpoint>
.

Это было полезно?

Решение

Есть два медиатора для ссылки на веб-сервисы.Те, кто Mediator Mediator и Позвоните в Mediator .Посредник выноска выполняет блокирующий вызов, а посредник вызова выполняет неблокирующий вызов.

Итак, вы должны использовать посредник вызова, если рассматривать о производительности.Это доступно в ESB 4.8.0.

Есть два образцы для них в документации Wiki.

.

Есть еще один образец для вызоваПосредник из блога Душана.Это имеет более сложные посредники, но вы можете попробовать.

Это просто быстрый ответ.

Я надеюсь, что это поможет.

Спасибо!

Другие советы

proxy1 ждет ответа от proxy2, даже вы используете посредник отправки. Проксиметр Proxy1 не должен выполняться перед выполнением оправдания прокси 2.

Переключатель на раскрытие Mediator - не идеальное решение для этого. Я думаю, что должно быть что-то не так с конфигурацией прокси.

Если вы можете опубликовать конфигурацию прокси здесь, мы могли бы дать вам помощь, чтобы решить это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top