Spring Boot Hystrix maximumSize 不起作用

Posted

技术标签:

【中文标题】Spring Boot Hystrix maximumSize 不起作用【英文标题】:Spring Boot Hystrix maximumSize not working 【发布时间】:2020-11-30 05:39:29 【问题描述】:

我在我的项目中使用了 Spring Boot 和 Hystrix

这是我的 pom 依赖项

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath />

<properties>
    <java.version>11</java.version>
    <cxf.version>3.3.1</cxf.version>
    <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

这是我的 application.properties

hystrix.threadpool.default.coreSize=2
hystrix.threadpool.default.maximumSize=200
hystrix.threadpool.default.maxQueueSize=50
hystrix.threadpool.default.queueSizeRejectionThreshold=50
hystrix.threadpool.default.keepAliveTimeMinutes=1
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize=true

使用此配置,我的应用无法处理 100ccu。显示这个错误:"java.util.concurrent.RejectedExecutionException: Rejected command because thread-pool queueSize is at rejection threshold".

我可以看到日志记录只创建 2 个 hystrix 线程来处理请求

hystrix-MyService-1
hystrix-MyService-2

为什么在我配置 maximumSize=200 时它无法创建更多线程来处理请求?

例如,如果我增加 coreSize=200,我可以看到它们永远不会终止。 那么如何设置一个小的 coreSize 但仍然可以在需要时处理更多请求(最多 maxSize 并发线程),然后在没有新请求时释放它们?

【问题讨论】:

【参考方案1】:

hystrix.threadpool.default.maximumSize 配置仅在 hystrix.threadpool.default.maxQueueSize=-1 时有效

如果在您的情况下需要队列 - 那么就无法在池中创建然后释放额外的线程。

有详细解释的文章:https://programmer.help/blogs/hystrix-thread-pool-configuration.html

【讨论】:

以上是关于Spring Boot Hystrix maximumSize 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Spring Boot mybatis分布式微服务云架构-hystrix参数详解

Spring Boot 中的 Hystrix 仪表板问题

Spring Cloud Spring Boot mybatis分布式微服务云架构-hystrix参数详解

深入Spring Boot:快速集成Dubbo + Hystrix

spring-boot-starter-actuator 与 hystrix-servo-metrics-publisher 冲突

带有 feign 和 hystrix 的 Spring Boot:无法让请求超时工作