在Spring Boot中使用RestClient时的并发连接限制

时间:2016-04-20 11:44:22

标签: java spring web-services spring-boot

我有一个使用Spring启动构建的测试微服务应用程序,我负载测试。在这样做的过程中,我似乎遇到了围绕服务之间的RestClient调用的阻塞问题。我没有进行任何配置更改,因此线程池等都使用默认值。我的所有测试都在AWS微实例上,并使用loader.io来执行初始客户端请求。

该应用程序有两个服务在不同的服务器上运行

  1. 返回最近用户帖子列表的服务(无负载响应为340毫秒)
  2. 获取userId列表并返回配置文件信息的服务(无负载响应为(80ms)
  3. 在执行服务#1期间,有一个对服务#2的调用来修饰关于发布用户的详细信息,包括我是否遵循它们等。

    缓存在服务中就位,即使在负载下,配置文件服务也能够在大约50ms内响应。如果我将内部请求从邮政服务中删除到配置文件服务,它在大约400毫秒时保持不变。

    我观察到的是,在负载下这些服务之间的往返时间调整随着并发请求数量的增加而线性增加。在相同的负载条件下(80tps),服务之间的呼叫响应时间最多可达4s左右。

    代码使用简单的RestTemplate在服务之间进行调用,例如:

            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            HttpEntity<String> httpEntity = new HttpEntity<String>(headers);
            responseVal = restTemplate.exchange(url, HttpMethod.GET, httpEntity,String.class);
    

    对Spring中的服务之间可以进行的并发请求数量是否有任意限制?如果是这样,那怎么可以增加?

1 个答案:

答案 0 :(得分:0)

调用服务正在使用@Transactional注释,然后强制按顺序处理GET。删除了这个并且现在运行得很好