【发布时间】:2021-08-15 13:41:18
【问题描述】:
我们有 3 层系统(UI、Server1、Server2)
我们必须将文件从我们的客户端(Angular)传输到某个服务器(java server1,Spring),这个服务器必须将文件数据传递给第二个服务器
UI => 服务器 1 ==> 服务器 2
我们希望将字节从 UI 流式传输到“服务器 2”,而不将文件存储在“服务器 1”的磁盘上或不将文件数据存储在“服务器 1”的内存中
链接“UI”==>“Server 1”快的问题
“服务器 1”==>“服务器 2”的链接很慢
我们面临的问题是文件数据在输出流中被缓冲到“服务器 2”
这是我们目前使用的函数:
private ResponseEntity<String> upload(String url, HttpHeaders headers, HttpServletRequest request) {
// copy bytes from caller input stream to FE request stream
RequestCallback requestCallback = (ClientHttpRequest req) -> {
Utils.propagateHeaders(headers,req);
request.getInputStream().transferTo(req.getBody());
};
// execute the call to server 2
ResponseEntity executeResult = template.execute(url, HttpMethod.PUT, requestCallback, (clientHttpResponse) -> {
HttpStatus statusCode = clientHttpResponse.getStatusCode();
return ResponseEntity.status(statusCode);
});
return executeResult;
}
所以我们知道这是一个背压问题,request.getInputStream() 必须以输出流可以通过线路发送数据的速度将数据发送到输出流
最好的方法是什么?
谢谢
【问题讨论】:
标签: java stream backpressure