Spring boot 断路器不在外国客户处工作+;Netflix Ribbon&x2B;春季重试
使用带客户端负载平衡器功能区和Spring的外设客户端重试。没有尤里卡 得到:Spring boot 断路器不在外国客户处工作+;Netflix Ribbon&x2B;春季重试,spring-boot,feign,spring-retry,netflix-ribbon,Spring Boot,Feign,Spring Retry,Netflix Ribbon,使用带客户端负载平衡器功能区和Spring的外设客户端重试。没有尤里卡 得到: application.yml中的服务器列表 Netflix功能区和Spring重试的默认配置 想要: 从服务器列表连接到第一台服务器 如果出现异常,则断开第一台服务器的断路器N秒 连接到第二台服务器 如果出现异常,则断开第二台服务器的断路器N秒 连接到第三台服务器 ... 等 我得到的是: 从服务器列表连接到第一台服务器 如果出现异常,请连接到第二台服务器 如果出现异常,请连接到第三台服务器 ... 等 实际上,断
RibbonLoadBalancedRetryPolicy | host1:8080 RetryCount: 2 Successive Failures: 3 CircuitBreakerTripped:true
但新的请求将被发送到该服务器。虽然CircuitBreakerTripped:true,但我在调试中看到对停机服务器的请求
功能区文档说明我可以使用AvailabilityFilteringRule:
此规则将跳过被视为“电路跳闸”或具有高并发连接计数的服务器。默认情况下,如果RestClient在过去三次都未能与实例建立连接,则实例将被电路触发。一旦一个实例被电路跳闸,它将在电路再次被视为闭合之前保持该状态30秒。但是,如果它继续出现连接故障,它将再次成为“电路跳闸”,等待它“电路闭合”的时间将以指数形式增加到连续故障的数量
但这并没有帮助。无论如何,重试逻辑和其他功能区工作正常,断路器除外
知道我错过了什么吗
应用程序配置:
niws:
loadbalancer:
default:
circuitTripMaxTimeoutSeconds: 60
connectionFailureCountThreshold: 1
my-service:
ribbon:
eureka:
enabled: false
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
ServerListRefreshInterval: 60000
listOfServers: http://localhost:8182,http://localhost:8183,http://localhost:8184
OkToRetryOnAllOperations: true
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 2
外国客户:
@FeignClient(
name = "my-service",
configuration = {
FeignClientConfiguration.class
}
)
public interface Client {...}
假装客户端配置:
@Bean
@Primary
public Client client(
CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) {
...
return new LoadBalancerFeignClient(client, cachingFactory, clientFactory);
}