Mule ESB将OutputStream设置为MessageContext作为有效负载

时间:2015-01-21 13:02:43

标签: java mule esb

我有一个自定义HTTP连接器作为单独的spring bean。它正在调用返回视频流的远程服务器。 Connector获取输入参数和baseURL的消息对象:

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));

由于Apache HttpClient lib的实现将所有流存储在RAM中,因此不幸的是在文件上得到的OutOfMemoryError超过几兆兆字节的数据

是否可以直接将流转发给客户端而不进行处理,如:

ctx.setPayload(outputStream);

? 或者任何其他想法,以避免在Mule中流缓冲并将所有数据转发给客户端?

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的httpClient问题,而不是骡子问题。

我不建议Mule为你做的工作。尝试将该工作留给http:outbound-endpoint,它将为您处理流模式。

如果你真的需要性能,你也可以尝试新的Mule 3.6,它包含一个新的http连接器,它比httpclient中的旧连接器更高效。