【问题标题】:Transmitting large data between two spring boot app在两个 Spring Boot 应用程序之间传输大数据
【发布时间】:2020-12-12 05:48:31
【问题描述】:

我有两个 Spring Boot 服务名称 A 和 B。

  • 服务 A 接收到一个多部分文件(大小 > 100MB - 1GB 的巨大文件)。
  • 服务 A 需要将文件传输到服务 B(问题区域
  • 服务 B 对数据执行一些操作并返回到服务 A。
  • 从 A 到 B 的调用是使用 RestTemplate 发送的。

问题领域

  • 服务 A 不会将整个文件加载到内存中,而是以块的形式从 Multipart InputStream 中读取。
  • 块被发送到 B,而不是完整的流。

是否可以将 multipart 的完整 InputStream 发送到服务 B,以便服务 A 不会加载文件以及通过 http/...(任何其他方式)分块文件

(我解决它的一种方法是在底层 linux 平台上使用 fifo,并且服务 A 在管道上连续写入,而服务 B 正在读取)-如果可能的话,我正在寻找某种方式来实现它。

背景 - 我希望服务 B 控制他们想要多少块,而不是服务 A。这是因为服务 B 执行的操作 - 服务 B 添加了一些额外的字节,所以当对下一个数据执行反向操作时,它可以看到这些额外的字节以了解应该读取多少块。

Github 更新 我不确定我在哪里弄错了?我粘贴了完整的项目 - https://github.com/robin-carry/large-data-transfer

所有逻辑都在下面的客户端/服务器上的主要文件/README.md 解释了我正在尝试/未能做的所有事情......

client/src/main/java/com/lockdown/lazy/client/controller/UploadController.java server/src/main/java/com/lockdown/lazy/server/controller/OpServiceController.java

【问题讨论】:

    标签: java spring-boot inputstream


    【解决方案1】:

    Apache Http Client 文档讨论了 Request/Response entity streaming - 看看这是否有助于解决您的问题。

    【讨论】:

    • 我试过你的选择,实际上RequestEntity 真的很有帮助。这正是我正在寻找的,但它不适用于大文件 - 我不确定我在哪里弄错了?我粘贴了完整的项目 - github.com/robin-carry/large-data-transfer 客户端/服务器上的主要文件,所有逻辑都在下面/README.md 解释了我正在尝试/未能做的一切......客户端/src/main/java/com/lockdown/lazy /client/controller/UploadController.java server/src/main/java/com/lockdown/lazy/server/controller/OpServiceController.java
    【解决方案2】:

    您可以使用 org.springframework.web.multipart.MultipartFile 作为参数设计接口,然后将其用作发送方的 feign 客户端,并在接收方的控制器中实现它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多