多实例文件解析微服务如何根据自身内存资源下载文件进行解析

问题遇到的现象和发生背景

我们现在有多个微服务实例,是用来做文件解析的,有一个微服务是用来分发文件的,现在的分发文件的策略为10个文件发送一次请求(发送文件信息)到文件解析微服务,文件解析服务器下载对应的文件,不管当前这个微服务是否还有资源解析,这样就会导致有的实例节点接收到的文件小,解析的快,然后实例资源就空闲;有的实例节点接收到的文件大,解析的慢,文件在这个实例节点就一直堆积阻塞了。

我想要达到的结果

现在想修改这个机制,每个微服务实例根据自己的资源使用情况,如果节点空闲则就去下载文件进行解析,也就是被动接收文件修改为主动获取文件进行解析。现在思路是这样,但是不知道如何去实现,应该如何实现呢?希望可以解答一下,使用的是JAVA语言,springboot微服务,rest接口

在每个文件解析微服务实例上,监测当前节点内存使用情况。
当内存空闲时,每个微服务实例发起请求请求分发微服务,要求分发文件。
分发微服务根据请求的微服务实例的当前资源情况来确定分发的文件。
文件解析微服务下载并解析文件。

@RestController
public class FileParseController {

  @GetMapping("/download-and-parse")
  public String downloadAndParse() {
    // 检查当前内存使用情况
    if (checkMemoryUsage()) {
      // 如果内存空闲,请求分发微服务获取文件
      File file = requestFileFromDistributeService();
      if (file != null) {
        // 解析文件
        parseFile(file);
        return "Success";
      }
    }
    return "Failure";
  }

  private boolean checkMemoryUsage() {
    // 实现内存使用情况的检查
    // ...
    return true;
  }

  private File requestFileFromDistributeService() {
    // 向分发微服务发送请求获取文件
    // ...
    return new File("example.txt");
  }

  private void parseFile(File file) {
    // 实现文件解析逻辑
    // ...
  }
}


分发微服务实现如下:

@RestController
public class FileDistributeController {

  @PostMapping("/request-file")
  public File requestFile() {
    // 根据请求的微服务实例的当前资源情况确定分发的文件
    // ...
    return new File("example.txt");
  }
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^