如何解决在 spring-cloud-openfeign 中设置最大可用连接
试图找出如何在 spring-cloud-feign 中限制每台主机的最大可用连接数。
有一个简单的 Spring Boot 应用程序,它只向自身发送和记录请求。试图设置下一个配置来限制连接池,但看起来它被忽略了:
feign.httpclient.max-connections-per-route=2
feign.httpclient.max-connections=2
有一个并行流,它请求一个虚拟服务器并在收到响应后写入日志。服务器在发送响应之前挂起 5 秒。
查看日志文件,我可以看到同时发出了 12 个请求。由我的 PC 的逻辑核心数决定。
2021-04-02 16:33:39.521 [http-nio-8081-exec-6] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-23] INFO com.example.springdemo.TestClient - made '156' request
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-19] INFO com.example.springdemo.TestClient - made '327' request
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-7] INFO com.example.springdemo.TestClient - made '406' request
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-21] INFO com.example.springdemo.TestClient - made '577' request
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-13] INFO com.example.springdemo.TestClient - made '827' request
2021-04-02 16:33:44.580 [ForkJoinPool.commonPool-worker-31] INFO com.example.springdemo.TestClient - made '452' request
2021-04-02 16:33:44.582 [ForkJoinPool.commonPool-worker-17] INFO com.example.springdemo.TestClient - made '31' request
2021-04-02 16:33:44.582 [ForkJoinPool.commonPool-worker-5] INFO com.example.springdemo.TestClient - made '906' request
2021-04-02 16:33:44.582 [ForkJoinPool.commonPool-worker-27] INFO com.example.springdemo.TestClient - made '968' request
2021-04-02 16:33:44.582 [ForkJoinPool.commonPool-worker-9] INFO com.example.springdemo.TestClient - made '77' request
2021-04-02 16:33:44.582 [ForkJoinPool.commonPool-worker-3] INFO com.example.springdemo.TestClient - made '15' request
2021-04-02 16:33:44.583 [main] INFO com.example.springdemo.TestClient - made '656' request
我错过了什么吗?
这是我为重现问题而制作的应用程序:
使用假客户端的一段代码:
public void tryParallelInvocation() {
IntStream.range(0,1000)
.parallel()
.forEach(value -> {
feignClient.testRequest(String.valueOf(value));
LOG.info("made '" + value + "' request");
});
}
Feign 客户端界面:
@FeignClient(value = "default",url = "http://localhost:8081/")
public interface TestFeignClient {
@GetMapping("/demo")
String testRequest(@RequestParam("param") String param);
}
REST 端点:
@GetMapping
public ResponseEntity<String> demo(@RequestParam(value = "param") String param) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return ResponseEntity.ok(param);
}
依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/>
</parent>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
application.properties:
server.port=8081
feign.httpclient.max-connections-per-route=2
feign.httpclient.max-connections=2
feign.httpclient.enabled=true
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。