【问题标题】:Mule ESB set OutputStream to MessageContext as payloadMule ESB 将 OutputStream 设置为 MessageContext 作为有效负载
【发布时间】:2015-03-20 00:20:20
【问题描述】:

我有一个自定义 HTTP 连接器作为单独的 spring bean。它正在调用返回视频流的远程服务器。连接器获取输入参数和 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 库的实现将所有流存储在 RAM 中,所以文件超过数百兆字节时会出现 OutOfMemoryError

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

ctx.setPayload(outputStream);

? 或者有什么其他想法可以避免 Mule 内部的流缓冲并将所有数据转发给客户端?

【问题讨论】:

    标签: java mule esb


    【解决方案1】:

    这是一个 httpClient 的问题,而不是 Mule 的问题。

    我不建议你自己做 Mule 实际为你做的工作。尝试将这项工作留给 http:outbound-endpoint,它会为您处理流式传输模式。

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

    【讨论】:

    • 谢谢。我编写了自定义 http 连接器,因为 mule http 连接器不支持使用 cookie 和标头、会话和多个用户的透明工作。这对我来说至关重要。
    • 对于大多数(如果不是全部)用例,Mule 可以处理 cookie、标头、感觉和身份验证。或许你可以把你的问题分解成不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-04-02
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多