2014-03-06 2 views
3

저지 클라이언트를 사용하여 타사 웹 서비스에 POST 요청을 보냅니다. 저지 클라이언트를 생성하는 것이 비용이 많이 들기 때문에 Spring에서 관리하는 서비스 클라이언트 클래스의 생성자에서이 작업을 수행합니다. 내 생각에 내 서버가 시작되면 Spring은 내 서비스 클라이언트 빈을 생성 할 것이고, 그러면 차례대로 생성자가 호출되어 저어지 클라이언트가 한 번 생성 될 것이다. 서버가 작동하는 한,이 저지 클라이언트는 요청을 전송할 책임이 있으며 더 이상의 클라이언트 초기화는 필요하지 않습니다. 그러나 저지 웹 리소스를 만드는 것이 훨씬 저렴하기 때문에 각 호출에 대해 새로운 웹 리소스를 작성하게 될 것입니다.스프링 관리 빈 생성자에서 저지 클라이언트 초기화

<bean id="myClient" class="com.mypackage,MyWebserviceClient"></bean> 

빈 (bean) myClient는 다음 서비스를 호출 할 필요가 적절한 위치에 주입됩니다

package com.mypackage; 
//Bunch of imports 

class MyWebserviceClient { 

    //jersey client member variable 
    private Client jClient; 

    public MyWebserviceClient(){ 

     //Create jersey client 
     jClient = Client.create(); 

     //Other stuff 
    } 

    public void sendRequest(){ 

     WebResource wr = jClient.resource(someUrl); 
     //Use the webresource to make webservice call 
    } 
} 

MyWebserviceClient는 봄 구성 XML에서와 같은 관리 봄입니다. 내 응용 프로그램이 시간당 수천 개의 요청을 처리하는 경우

내 질문에

1) 단 하나의 저지 클라이언트의 모든 요청을 처리 할 수있을만큼 효율적입니다.

2) 많은 수의 요청이보다 효율적으로 처리되도록 저지 클라이언트 풀이 필요합니까? 그렇다면 방법이 있습니까?

3) 일반적으로 최종 사용자가 들어오는 여러 요청이 서버 측에서 처리되는 방식을 알고 싶습니다. 각 요청은 서버에서 별도의 실행 스레드이며 모든 요청은 동일한 저지 클라이언트 객체에 대한 액세스 권한을가집니다. 저지 클라이언트 오브젝트가 이러한 요청 중 하나를 사용 중일 경우 다른 최종 사용자의 다른 요청이 진행중인 요청에 대한 응답을 수신 할 때까지 기다릴 것입니까?

4) 내가 사용하고있는 것보다 더 나은 대안.

답변

2

귀하의 생각은 궤도에 있습니다.

https://jersey.java.net/documentation/1.18/client-api.html#d4e623에서 :

클라이언트 인스턴스 비싼 자원입니다 -

1 예, 클라이언트 인스턴스를 다시 사용하는 것이 좋습니다. 구성된 인스턴스를 웹 자원 생성에 다시 사용하는 것이 좋습니다. 웹 리소스 생성, 요청 작성 및 응답 수신은 스레드로부터 안전합니다. 따라서 Client 인스턴스와 WebResource 인스턴스는 여러 스레드간에 공유 될 수 있습니다.

2 - 클라이언트 자체는 요청을 처리 할 필요가 없습니다. 비동기 요청의 경우 내부적으로 구성 가능한 스레드 풀을 사용합니다.

3 - 스레드가 차단되지 않도록 저지 클라이언트는 스레드 안전 서로

4 - 당신은 또한 MyWebserviceClient에 대한 종속성으로 클라이언트를 제공하는 것을 고려하고 가능한 여러 클래스

을 사이에 동일한 클라이언트를 다시 사용할 수 있습니다