1.eureka管理机制
- 心跳检测
客户端会在每30秒发送信息刷新服务端注册信息,表示续约,若在指定默认90秒钟没有向服务器发送信息,则从注册表中剔除
控制发送心跳间隔 eureka.instance.lease-renew-interval-in-seconds 默认30秒
控制超时清理间隔 eureka.instance.lease-expiration-duration-in-seconds 默认90秒 - 自我保护
服务端定期60秒检测注册表,清理无效服务点,但由于server开启了自我保护机制,即使有无效节点也不会剔除。
控制清理无效节点间隔 eureka.server.eviction-interval-timer-in-ms 默认60秒
控制开启/关闭自我保护 eureka.server.enable-self-preservation 默认true - 服务注册列表
通过心跳机制 服务端 定时更新注册列表 , 客户端页周期性通过http请求去服务端同步最新的注册表的信息,并缓存到本地默认30秒
同步最新注册表信息到本地间隔 eureka.client.registry-fetch-interval-seconds
2.Eureka配置介绍
配置 | 作用 | 配置示例 |
---|---|---|
euureka.client.service-url.defaultZone | 注册地址 | http://localhost:8089/eureka/ |
euureka.client.register-with-eureka | 是否注册到注册地址的注册中心(默认true) | false |
euureka.client.fetch-register | 是否同步抓取注册服务的信息(默认true) | false |
eureka.instance.prefer-ip-address | 使用Ip地址注册,而如果不配置就是机器的主机名。 | true |
eureka.instance.instance-id | 向注册中心注册服务id | ${spring.cloud.client.ip-address}:${ip-address}:${server.prot} |
eureka.instance.lease-renewal-interval-in-seconds | 发送心跳时间的间隔(默认30s) | 5 |
eureka.instance.lease-expiration-duration-in-seconds | 续约时间到期时间(默认90s) | 10 |
eureka.server.enable-self-preservation | 自我保护机制(默认true 开启) | false |
eureka.server.eviction-interval-timer-in-ms | 设置剔除服务间隔 | 4000(毫秒) |
这些配置的默认值 都是eureka经过测试的精确值,建议上线不要修改,而这些配置是我们测试以及开发的时候更方便我们的。
3.Feign配置介绍
springcloud版本从E开始 才支持Feign自定义设置
配置 | 作用 | 配置示例 |
---|---|---|
feign.client.config.feignName | 这里的feignName是你要远程调用的FeignClient的名称 | employee |
feign.client.config.feignName.connectTimeout | 建立连接的超时时长 | 5000 |
feign.client.config.feignName.readTimeout | 读取的超时时长 | 5000 |
feign.client.config.feignName.loggerLevel | Feign的日志级别 | FULL/NONE,BASIC,HEADERS |
feign.client.config.feignName.errorDecoder | Feign的错误解码器 | com.example.SimpleErrorDecoder |
feign.client.config.feignName.retryer | 配置重试 | com.example.SimpleRetryer |
feign.client.config.feignName.requestInterceptor | 添加请求组拦截 | com.example.Interceptor |
feign.client.config.feignName.decode404 | 配置熔断不处理404异常 | false |
feign.compression.request.enabled | 开启请求压缩 | true |
feign.compression.response.enabled | 开启响应压缩 | true |
feign.compression.request.mime-types | 触发压缩的数据类型 | text/html,application/xml,application/json |
feign.compression.request.mine-request-size | 触发压缩的大小上限 | 2048 |
feign支持对响应和请求进行GZIP的压缩,以减少通信中的性能损耗
feign日志输出的说明
- NONE: 不输出日志,节省性能,生产环境推荐
- BASIC: 适用于生产环境追踪问题
- HEADERS: 在BASIC的基础上记录请求和响应头信息
- FULL: 记录所有
4.熔断器的三个状态
当熔断器打开状态,微服务所有的远程调用服务将降级处理,直到熔断器关闭
5.熔断器的隔离策略
- 线程池隔离策略
使用一个线程池来存储当前请求,线程池对请求做处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列,这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以对突发流量(当流量红枫来临时,处理不完的请求可将数据存储到线程池队列中慢慢处理)
- 信号量隔离策略
使用一个原子计数器来记录当前有多少个线程在运行,请求来的时候先判断计数器中的数值,若超过设置的数值则丢弃请求,否则计数器+1,请求返回计数器-1,这种是严格控制线程立即返回模式,无法应对突发流量,(当流量红枫来临时,处理不完的请求会直接返回)
6.Hystrix配置介绍
配置 | 作用 | 配置示例 |
---|---|---|
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds | 默认连接超时时间1秒,1秒若没返回触发降级处理 | 3000 |
hystrix.command.default.circuitBreaker.requestVolumeThreshold | 触发熔断的最小请求次数 | 20(默认) |
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds | 熔断后多少秒尝试请求 | 10000(默认) |
hystrix.command.default.circuitBreaker.errorThresholdPrecentage | 触发熔断的失败请求的最小占比 | 50(默认) |
hystrix.command.default.execution.isolation.strategy | 配置隔离策略 | ExecutionIsolationStrategy.SEMAPHORE(信号量)/ ExecutionIsolationStrategy.THREAD(线程池) |
hystrix.command.default.execution.isolation.maxConcurrentRequests | 最大信号量上限 | 1000 |
一键查询淘宝/拼多多内部优惠券,每日大额外卖红包,购物省钱的宝藏工具