【发布时间】:2018-02-14 02:49:54
【问题描述】:
我有 Spring Cloud 打包的 Zuul API 网关,使用以下配置运行 -
# Eureka Client Config to register ZUUL with Eureka
eureka:
client:
healthcheck:
enabled: true
lease:
duration: 5
service-url:
defaultZone: http://localhost:8761/eureka/
# Ribbon Global Config
ribbon:
OkToRetryOnAllOperations: false
ReadTimeout: 30000
ConnectTimeout: 1000
MaxTotalHttpConnections: 1600
MaxConnectionsPerHost: 800
MaxAutoRetries: 11
MaxAutoRetriesNextServer: 111
# Ribbon Named Client Config for Ingest API
ingestService:
ribbon:
eureka:
enabled: false
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: http://test-nlb-zuul-us-west-2c-6af11a3ede8a872a.elb.us-west-2.amazonaws.com
OkToRetryOnAllOperations: true
MaxAutoRetries: 1
MaxAutoRetriesNextServer: 1
MaxTotalHttpConnections: 500
MaxConnectionsPerHost: 200
retryableStatusCodes: 500, 501, 502, 503
ReadTimeout: 10000
ConnectTimeout: 1000
# Zuul Routes
zuul:
debug:
request: true
parameter: true
host: # timeout config for direct URL based requests from Zuul to external URLs
connect-timeout-millis: 10000
socket-timeout-millis: 20000
ignored-services: '*'
routes:
ingest:
path: /ingest/**
retryable: true
stripPrefix: false
serviceId: ingestService
management.security.enabled : false
spring:
application:
name: zuul-gateway
cloud:
loadbalancer:
retry:
enabled: true
logging:
level:
org:
springframework:
retry: DEBUG
apache:
http: DEBUG
com:
netflix:
ribbon: DEBUG
eureka: DEBUG
discovery: DEBUG
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 30000
当我点击 zuul /ingest 端点时,请求被重定向到 ingestService 的功能区 serviceId 配置下列出的服务器。但是,我看到功能区重试配置被完全忽略。
当服务器暂时出现 HTTP 500 错误时,全局功能区配置 - ribbon.MaxAutoRetries=11 和命名客户端配置 - ingestService.ribbon.MaxAutoRetries=1 都会被忽略。我看到重试发生正好 10 次,我不知道重试配置来自哪里,这似乎完全违反了可用的文档。我不知道从哪里开始调试,因为我是整个 netflix 工具生态系统的新手。想检查我是否犯了一些配置错误。请指教。
这是我的 pom.xml
<?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>
<groupId>com.mycomp</groupId>
<artifactId>zuul-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>zuul-gateway</name>
<description>Spring Boot Zuul</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
以及spring应用启动
package com.mycomp.zuulgateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableZuulProxy
@EnableDiscoveryClient
@EnableCircuitBreaker
public class ZuulGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulGatewayApplication.class, args);
}
}
【问题讨论】:
标签: netflix-zuul spring-cloud-netflix spring-retry