2015-01-21 2 views
1

У меня есть пользовательский коннектор HTTP как отдельный весенний боб. Он вызывает удаленный сервер, который возвращает видеопотоки. Соединитель получает объект сообщения для входных параметров и BaseUrl:Mule ESB устанавливает OutputStream в MessageContext как полезную нагрузку

public class MediaArchiveHttpConnector {  

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

Теперь я звоню удаленную конечную точку с Apache HttpClient Lib:

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

И Unfortunatelly получить OutOfMemoryError на файлах больше, чем несколько hundreads мегабайта, потому что реализация Apache HttpClient lib хранит весь поток в оперативной памяти

Возможно ли пересылать поток непосредственно клиенту без его обработки:

ctx.setPayload(outputStream); 

? Или любые другие идеи, чтобы избежать буферизации потока внутри Mule и перенаправить все данные клиенту?

ответ

0

Это скорее вопрос httpClient, а не вопрос Мула.

Я не рекомендую вам работать, что Мул на самом деле для вас. Попытайтесь оставить эту работу на http: outbound-endpoint, и она позаботится о режиме потоковой передачи для вас.

Если вам действительно нужна производительность, вы также можете попробовать новый Mule 3.6, который включает в себя новый HTTP-коннектор, гораздо более эффективный, чем старый, основанный на httpclient.

+0

Thx. Я написал собственный http-коннектор, потому что mule http connector не поддерживает прозрачную работу с куки-файлами и заголовками, сеансами и несколькими пользователями. Это очень важно для меня. –

+0

Для большинства, если не всех из них, Mule может обрабатывать файлы cookie, заголовки, сенсоры и auth. Возможно, вы можете решить свои проблемы в разных вопросах. –

Смежные вопросы