springcloud针对eureka、ribbon、feign、hystrix配置解释

springcloud针对eureka、ribbon、feign、hystrix配置详解

前言

随着微服务体系成熟,配置文件都有了范本,因此很多配置我们都是拿来就用,并不明白配置的理由。本文对一些常用、非常用的配置进一步解释,并记录本人配置过程中踩过的坑、解决过的问题。

版本

该文中springcloud版本为
Finchley.SR3

eureka相关配置

eureka:
  instance:
    prefer-ip-address: true
    instance-id:
    ip-address:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://my-eureka1:10100/eureka,http://my-eureka2:10100/eureka
  server:
    enable-self-preservation: false
prefer-ip-address: true
instance-id:
ip-address:

这里想重点说下这三个配置,并不是很常用,但很有用!
instance_id就是服务注册在注册中心实例名注册中心以此来标识不同的服务。若不进行单独设置,则该值默认为主机名+服务名+端口,基本可以唯一标识一个服务了。但有时主机名并不具有很好的可读性,比如虚拟机主机名就是一串乱码,此时可以手动设置该属性。
prefer-ip-address: true表示优先使用ip地址作为主机名标识,该配置可以使得主机名可读性增加,主机名辨识度低的首选解决方案
ip-address:显示的定义实例ip,这个配置很容易被忽略,因为一般实例注册时会自行解析ip并注册在注册中心中。但是对于网络环境比较复杂的情况,比如被代理的A服务注册在被代理的B注册中心上,此时如果不作显示设置,A会将代理前的ip注册在B上作为实例ip,此时如果与A代理前环境网络不通的服务C注册在B上,获取到的A实例则不可访问。有点拗口。。。对于上述这种情况,我们需要将代理后的A地址显示的注册到B上,则C获取到的A实例ip即为代理后的ip。还有一种场景,前面提到实例在注册时会使用解析的ip注册,但如果由于某种原因,DNS解析过慢,则在一定时长(默认1s)获取不到ip时,服务将会以localhost作为ip注册实例,这明显不合理。因此显示定义ip在该场景下也很使用。

ribbon、hystrix相关配置

ribbon:
  okhttp:
    enabled: true
  http:
    client:
      enabled: false
  ConnectTimeout: 3000
  ReadTimeout: 10000
  #retry
  maxAutoRetries: 2
  maxAutoRetriesNextServer: 1

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 50000

我们在zuul和各服务中一般这样配置,使用okhttp代替httpclient,连接超时设置为3s,读取超时设置为10s(根据实际情况调整
zuul的重试机制需要单独配置开启

zuul:
  retryable: true

开启重试需要引入依赖

		<!--重试依赖-->
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>

maxAutoRetries:对单个实例重试2次,即共访问3次
maxAutoRetriesNextServer:切换实例1次
即一共访问(2+1)*(1+1)= 6
因此最大耗时**(3s+10s)6次=48000ms*
因此熔断器超时设置为
timeoutInMilliseconds: 50000
50s,这样熔断机制才有意义

feign配置

feign:
  okhttp:
    enabled: true
  httpclient:
    enabled: false
  #gzip
  compression:
    request:
      enabled: true
    response:
      enabled: true

在使用feign的服务中,我们会基于上面对ribbon的配置再加这些:使用okhttp代替httpclient,并针对gzip传输进行优化。

总结

以上,好像什么都没说。。。基本常用的也就是这些配置了。

猜你喜欢

转载自blog.csdn.net/weixin_42189048/article/details/106412982