12.6. 분리된 모드에서 HTTP 전송 사용

12.6.1. 개요

일반적인 HTTP 요청/응답 시나리오에서는 요청 및 응답이 동일한 HTTP 연결을 사용하여 전송됩니다. 서비스 공급자는 요청을 처리하고 적절한 HTTP 상태 코드 및 응답 콘텐츠를 포함하는 응답으로 응답합니다. 요청이 성공하면 HTTP 상태 코드가 200으로 설정됩니다.

WS-RM을 사용하거나 요청이 실행하는 데 시간이 오래 걸리는 경우와 같이 일부 경우 요청 및 응답 메시지를 분리하는 것이 좋습니다. 이 경우 서비스 제공 업체는 요청을 수신한 HTTP 연결의 백채널을 통해 소비자에게 202 Accepted 응답을 보냅니다. 그런 다음 요청을 처리하고 새로운 분리 된 서버를 사용하여 소비자로 응답을 다시 보냅니다. 소비자 런타임은 들어오는 응답을 수신하고 애플리케이션 코드로 반환하기 전에 적절한 요청과 관련이 있습니다.

12.6.2. 분리된 상호 작용 구성

분리된 모드에서 HTTP 전송을 사용하려면 다음을 수행해야 합니다.

  1. WS-Addressing을 사용하도록 소비자를 구성합니다.

    “WS-Addressing을 사용하도록 엔드포인트 구성” 을 참조하십시오.

  2. 분리된 엔드포인트를 사용하도록 소비자를 구성합니다.

    “소비자 구성” 을 참조하십시오.

  3. 사용자가 WS-Addressing을 사용하도록 소비자가 상호 작용하는 서비스 공급자를 구성합니다.

    “WS-Addressing을 사용하도록 엔드포인트 구성” 을 참조하십시오.

12.6.3. WS-Addressing을 사용하도록 엔드포인트 구성

소비자가 WS-Addressing을 사용하는 소비자 및 모든 서비스 공급자를 지정합니다.

끝점이 다음 두 가지 방법 중 하나로 WS-Addressing을 사용하도록 지정할 수 있습니다.

  • 예 12.19. “WSDL을 사용하여 WS 주소 지정 활성화” 과 같이 wswa:UsingAddressing 요소를 엔드포인트의 WSDL 포트 요소에 추가합니다.

    예 12.19. WSDL을 사용하여 WS 주소 지정 활성화

    ...
    <service name="WidgetSOAPService">
      <port name="WidgetSOAPPort" binding="tns:WidgetSOAPBinding">
        <soap:address="http://widgetvendor.net/widgetSeller" />
        <wswa:UsingAddressing xmlns:wswa="http://www.w3.org/2005/02/addressing/wsdl"/>
      </port>
    </service>
    ...
  • 예 12.20. “정책을 사용하여 WS 연결 활성화” 과 같이 끝점의 WSDL 포트 요소에 WS-Addressing 정책 추가

    예 12.20. 정책을 사용하여 WS 연결 활성화

    ...
    <service name="WidgetSOAPService">
      <port name="WidgetSOAPPort" binding="tns:WidgetSOAPBinding">
        <soap:address="http://widgetvendor.net/widgetSeller" />
        <wsp:Policy xmlns:wsp="http://www.w3.org/2006/07/ws-policy"> <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata"> <wsp:Policy/> </wsam:Addressing> </wsp:Policy>
      </port>
    </service>
    ...
참고

WS-Addressing 정책은 wswa:UsingAddressing WSDL 요소를 대체합니다.

12.6.4. 소비자 구성

http-conf:conduit 요소의 DecoupledEndpoint 특성을 사용하여 분리된 엔드포인트를 사용하도록 소비자 엔드포인트를 구성합니다.

예 12.21. “분리된 HTTP 끝점을 사용하도록 소비자 구성” 분리된 끝점을 사용하도록 예 12.19. “WSDL을 사용하여 WS 주소 지정 활성화” 에 정의된 엔드포인트를 설정하는 구성을 보여줍니다. 이제 소비자는 http://widgetvendor.net/widgetSellerInbox 에서 모든 응답을 받습니다.

예 12.21. 분리된 HTTP 끝점을 사용하도록 소비자 구성

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:http="http://cxf.apache.org/transports/http/configuration"
       xsi:schemaLocation="http://cxf.apache.org/transports/http/configuration
                             http://cxf.apache.org/schemas/configuration/http-conf.xsd
                           http://www.springframework.org/schema/beans
                             http://www.springframework.org/schema/beans/spring-beans.xsd">

  <http:conduit name="{http://widgetvendor.net/services}WidgetSOAPPort.http-conduit">
    <http:client DecoupledEndpoint="http://widgetvendor.net:9999/decoupled_endpoint" />
  </http:conduit>
</beans>

12.6.5. 메시지를 처리하는 방법

분리된 모드에서 HTTP 전송을 사용하면 HTTP 메시지 처리에 더 복잡한 계층을 추가합니다. 애플리케이션의 구현 수준 코드에 더 복잡한 복잡성이 투명하지만, 디버깅 이유를 위해 발생하는 상황을 이해하는 것이 중요할 수 있습니다.

그림 12.1. “분리된 HTTP 전송을 위한 메시지 흐름” 는 HTTP를 분리된 모드로 사용할 때 메시지 흐름을 표시합니다.

그림 12.1. 분리된 HTTP 전송을 위한 메시지 흐름

분리된 메시지 교환에는 15 단계가 있습니다.

요청은 다음 프로세스를 시작합니다.

  1. 소비자 구현은 작업을 호출하고 요청 메시지가 생성됩니다.
  2. WS-Addressing 계층은 WS-A 헤더를 메시지에 추가합니다.

    분리된 끝점이 소비자 구성에 지정되면 decoupled 엔드포인트의 주소가 WS-A ReplyTo 헤더에 배치됩니다.

  3. 메시지가 서비스 공급자로 전송됩니다.
  4. 서비스 공급자가 메시지를 수신합니다.
  5. 소비자의 요청 메시지는 공급자의 WS-A 계층으로 디스패치됩니다.
  6. WS-A ReplyTo 헤더가 anonymous로 설정되지 않았기 때문에 공급자는 HTTP 상태 코드가 202로 설정된 메시지를 다시 보냅니다. 요청이 수신되었음을 인정합니다.
  7. HTTP 계층은 원래 연결의 백채널을 사용하여 202 수락된 메시지를 소비자에게 다시 보냅니다.
  8. 소비자는 원본 메시지를 보내는 데 사용되는 HTTP 연결의 백채널에 202 Accepted 응답을 수신합니다.

    소비자가 202 Accepted 응답을 받으면 HTTP 연결이 종료됩니다.

  9. 요청은 요청이 처리되는 서비스 공급자의 구현에 전달됩니다.
  10. 응답이 준비되면 WS-A 계층으로 디스패치됩니다.
  11. WS-A 계층은 WS-Addressing 헤더를 응답 메시지에 추가합니다.
  12. HTTP 전송은 고객의 분리된 엔드포인트에 응답을 보냅니다.
  13. 소비자의 분리된 엔드포인트는 서비스 공급자로부터 응답을 수신합니다.
  14. 이 응답은 WS-A RelatesTo 헤더를 사용하여 적절한 요청과 상관 관계가 있는 소비자의 WS-A 계층으로 디스패치됩니다.
  15. 상관 관계가 클라이언트 구현으로 반환되고 호출은 차단 해제됩니다.