# fingersky **Repository Path**: wonhyoo/fingersky ## Basic Information - **Project Name**: fingersky - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-08-06 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fingersky #### 介绍 {**以下是码云平台说明,您可以替换此简介** 码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) #### spring: application: name: gateway mvc: servlet: # 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet # 一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载,正数的值越小,启动该servlet的优先级越高 load-on-startup: 1 server: port: 9000 eureka: client: service-url: defaultZone: http://localhost:8000/eureka/ registry-fetch-interval-seconds: 5 instance: lease-expiration-duration-in-seconds: 15 lease-renewal-interval-in-seconds: 5 prefer-ip-address: true instance-id: ${spring.application.name}:${server.port} zuul: # 是否开启重试,默认为false # 注意使用此功能需要引入依赖,并且需要配合最下面的ribbon配置一起使用 # # org.springframework.retry # spring-retry # retryable: true # 设置全局访问的前缀,配置之后所有请求前缀需要加上/api prefix: /api # 配置该属性将会禁止header中的某些属性向下传递,默认为"Cookie", "Set-Cookie", "Authorization" # 其源码在PreDecorationFilter.run()中体现,其原理主要是将配置项加入下面的ignored-headers而已 # 客户端 若某属性是在ZUUL的Filter中又addZuulRequestHeader添加则不会过滤 sensitive-headers: - Cookie - Set-Cookie - Authorization - token # 忽略请求头中的某些属性,具体实现在构建ProxyRequestHelper.buildZuulRequestHeaders(HttpServletRequest request) 中体现, # 会根据配置的ignored-headers排除掉忽略的header然后重新构造一个header供ribbon使用 # 服务之间 ignored-headers: - token # 此属性只会对SimpleHostRoutingFilter生效,RibbonRoutingFilter使用的是ribbon的配置 host: # 最大连接数,默认为200 max-total-connections: 200 # 单个路由可以使用的最大连接数,默认为20 max-per-route-connections: 20 # http client中从connection pool中获得一个connection的超时时间,默认为-1,不超时 connection-request-timeout-millis: -1 # 连接建立的超时时间;,默认为2000ms connect-timeout-millis: 2000 # 响应超时时间,默认为10000ms socket-timeout-millis: 10000 # 路由规则 routes: # 用户自定义一个名称,内部是一个Map user-server: # 需要拦截后转发请求的地址,支持通配符匹配,不配置默认为/user-server/** path: /user-server/** # spring cloud服务id,不配默认为上面自定义的名称 serverId: user # 是否支持上面的prefix,默认为true,设为false访问该服务前缀不需要/api stripPrefix: true # 将请求发送到指定的服务器,不会走ribbon、hystrix,正常请求是走RibbonRoutingFilter, # 此请求会走SimpleHostRoutingFilter url: http://localhost:8001 # 和全局配置作用一样,优先级高于全局配置 sensitive-headers: - Cookie - Set-Cookie - Authorization # 是否启用自定义配置,默认为false,初始化时会根据sensitive-headers的长度来判断,长度大于0则为true custom-sensitive-headers: false # 可配置THREAD(线程池模式), SEMAPHORE(信号量模式),默认为SEMAPHORE # 此功能是基于hystrix实现,将请求包装为一个HystrixCommond,hystrix内部自身实现了熔断、隔离等机制 # THREAD隔离模式下是请求超时是会取消调用线程从而立即返回的,SEMAPHORE模式下会等待响应回来再判断是否超时 ribbonIsolationStrategy: SEMAPHORE # 可以通过这个配置控制所有服务的信号量,默认为100,这里指的是每个服务都是100不是所有服务加起来为100 # 请求的并发线程超过100就会报错,也可以改为使用线程隔离,调大hystrix线程池线程大小,该线程池默认10个线程 semaphore: maxSemaphores: 100 # 单独配置每个服务的信号量,不配置默认为100 eureka: # 用户自定义名称 user-server: # 信号量 semaphore: # 最大访问量,默认为全局配置的值也就是100,单独配置的优先级高于全局配置 # 此配置的源码在AbstractRibbonCommand.getSetter(final String commandKey,ZuulProperties zuulProperties, IClientConfig config)中被使用 maxSemaphores: 100 # 需要注意在使用path和url的映射关系来配置路由规则时,对于路由转发的请求不会采用HystrixCommand来包装, # 所以这类路由请求没有线程隔离和断路器的保护以及负载均衡的能力。 # 所以使用Zuul的时候尽量使用path和serviceId的方式配置 # ribbon.eager-load.enabled:开启Ribbon的饥饿加载模式 # ribbon.eager-load.clients:指定需要饥饿加载的客户端名称、服务名 # ribbon配置,ribbon的初始化源码在RibbonClientConfiguration.ribbonClientConfig() # 核心代码为config.loadProperties(this.name);这句代码加载了ribbon的配置 # 重试是针对在eureka注册表中能够获取到服务对应的实例然后发起http请求失败时生效, # 如果根本无法获取到服务实例则会直接抛出异常 ribbon: eager-load: enabled: true # 下面三个参数在源码DefaultLoadBalancerRetryHandler的构造方法中被使用 # 构造方法:public DefaultLoadBalancerRetryHandler(IClientConfig clientConfig) # 是否所有请求都启用重试机制,默认为false,源码中发现默认的时候只支持的是GET请求,如果配置为true支持所有请求 # 源码:return HttpMethod.GET == method || lbContext.isOkToRetryOnAllOperations(); # 重试核心源代码在RetryTemplate.doExecute(RetryCallback retryCallback,RecoveryCallback recoveryCallback, RetryState state) # 重试的原理如下图所示,N代表第一次请求,R代表重试 # 第一种情况MaxAutoRetries=1,MaxAutoRetriesNextServer=1,总请求次数为4次 # NR NR # 第二种情况MaxAutoRetries=2,MaxAutoRetriesNextServer=1,总请求次数为6次 # NRR NRR # 第三种情况MaxAutoRetries=1,MaxAutoRetriesNextServer=2,总请求次数为6次 # NR NR NR # 第四种情况MaxAutoRetries=2,MaxAutoRetriesNextServer=2,总请求次数为9次 # NRR NRR NRR # 这种最好不要true,修改新增时若网络波动数据会出现幂等性问题 OkToRetryOnAllOperations: true # 当前实例重试次数,默认为0 MaxAutoRetries: 1 # 切换实例重试次数,默认为1 MaxAutoRetriesNextServer: 2