2015-01-21 1 views
1

저는 별도의 스프링 빈으로 사용자 정의 HTTP 커넥터를 사용하고 있습니다. 비디오 스트림을 반환하는 원격 서버를 호출하고 있습니다. 커넥터는 입력 매개 변수와 base을위한 메시지 객체를 가져옵니다Mule ESB가 OutputStream을 MessageContext로 페이로드로 설정합니다.

public class MediaArchiveHttpConnector {  

    public void processHttpRequest(Object message, String baseURL) 
      throws IOException { 
... 
MessageContext ctx = (MessageContext) message; 
... 

는 지금은 아파치 HttpClient를 lib 디렉토리와 함께 원격 엔드 포인트를 호출하고 있습니다 : unfortunatelly

... 
response = httpclient.execute(httpRequest); 
HttpEntity entity = response.getEntity(); 
... 
ctx.setPayload(EntityUtils.toByteArray(entity)); 

와 메가 바이트의 몇 hundreads 이상의 파일에 OutOfMemoryError를 얻을 때문에 아파치 HttpClient lib의 구현은 모든 스트림을 RAM에 저장합니다

다음과 같이 처리하지 않고 클라이언트에 직접 스트림을 전달할 수 있습니까?

ctx.setPayload(outputStream); 

? 또는 Mule에서 스트림 버퍼링을 피하고 모든 데이터를 클라이언트로 전달하는 다른 방법은 없습니까?

답변

0

뮬 질문이 아닌 httpClient 질문입니다.

뮬이 실제로 당신을 위해하는 일을 스스로하는 것은 좋지 않습니다. http : 아웃 바운드 엔드 포인트로 작업을 남겨두면 스트리밍 모드가 처리됩니다.

성능이 정말로 필요한 경우 새로운 http 커넥터를 포함하는 새로운 Mule 3.6을 시도해 볼 수 있습니다. 예를 들어 httpclient를 기반으로하는 이전 버전보다 훨씬 뛰어난 성능을 제공합니다.

+0

Thx. mule http 커넥터는 쿠키와 헤더, 세션 및 다중 사용자로 transparrent 작업을 지원하지 않기 때문에 사용자 정의 http conntector를 작성했습니다. 그것은 나를 위해 중요합니다. –

+0

대부분의 경우 유팩은 쿠키, 헤더, 감각 및 인증을 처리 할 수 ​​있습니다. 아마도 당신은 다른 질문들에서 당신의 문제들을 분해 할 수 있습니다. –

관련 문제