왜 WSO2를 보내는 중재자가 응답을 기다리지 않는 이유는 무엇입니까?

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

  •  21-12-2019
  •  | 
  •  

문제

WebService를 호출하는 다른 프록시를 호출하는 WSO2 ESB-4.6.0 프록시가 있습니다.

Proxy1 --> Proxy2 --> Endpoint
.

SOAPUI를 통해 두 번째 프록시를 직접 호출하면 응답이 올바르게 반환되고 인쇄되지만 첫 번째 프록시를 호출하면 빈 본문이 반환됩니다.
















































ESB 로그에서 PROXY1의 초고는 PROXY2의 출고 전에 인쇄됩니다. PROXY1의 즉시 PROXY2의 인후에있는 보낸 중재자가 PROXY2에 비동기식 호출을하는 것처럼 보입니다.
콜 아웃 중재자가 보내는 중재자를 교체하려고했지만 결과는 동일합니다.
이를 따릅니다 튜토리얼. 그러나 그것은 또한 작동하지 않았습니다.

PROXY2에 대한 응답을 호출자에게 전달하는 방법은 무엇입니까? 도와주세요. 그것은 나를 죽이고 있습니다!

편집

문제 해결! 콜 아웃 중재자를위한 ServiceURL 매개 변수를 지정하려면 잘못된 포트를 사용하고있었습니다.

편집

현재 프록시 구성 :

Proxy1 (Proxy 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>
.

프록시 3 (서비스 호출 - getappointment) :

<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>
.

도움이 되었습니까?

해결책

웹 서비스를 호출하는 두 가지 중재자가 있습니다.그것들은 콜 아웃 중재자 Call Mediator .콜 아웃 중재자는 차단 호출을 수행하고 호출 중재자는 차단되지 않는 호출을 수행합니다.

그래서 성능에 대해 고려하면 통화 중재자를 사용해야합니다.ESB 4.8.0에서 Availble입니다.

두 개의 샘플

또 다른 샘플 Dushan의 블로그의 중재자.이것은 더 복잡한 중재자를 가지고 있지만 시도 할 수 있습니다.

이것은 빠른 답변 일뿐입니다.

이 도움이되기를 바랍니다.

감사합니다!

다른 팁

PROXY1은 PROXY2의 응답을 대기합니다. 송신 중재자를 사용하십시오. PROXY1의 출고는 PROXY2의 즉시 실행을 실행하기 전에 실행해서는 안됩니다.

콜 아웃 중재자로 전환하는 것은 이 아닙니다 이에 대한 이상적인 솔루션입니다. 프록시 구성에 문제가 있어야합니다.

여기 프록시 구성을 게시 할 수있는 경우,이를 해결하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top