spring Cloud 初次使用容易忽略环节

来源:互联网 发布:js去隐藏域传值 编辑:程序博客网 时间:2024/05/24 04:13

1、Eureka自我保护模式


默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会


注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,这


就可能变得非常危险了----因为微服务本身是健康的,此时本不应该注销这个微服务。


  Eureka Server通过“自我保护模式”来解决这个问题----当Eureka Server节点在短时间内丢失过多


客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,


Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服


务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。


  自我保护模式是一种对网络异常的安全保护措施。使用自我保护模式,而已让Eureka集群更加的健壮、稳定。

在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false来禁用自我保护模式,
也可以使用显示指定IP地址来解决
eureka.instance.instance-id: ${spring.cloud.client.ipAddress}:${server.port}


2、多网卡服务器环境下各个微服务注册到Eureka Sever上IP要如何制定

    

解决方案

(1)、忽略指定网卡


通过上面源码分析可以得知,spring cloud肯定能配置一个网卡忽略列表。通过查文档资料得知确实存在该属性:spring.cloud.inetutils.ignored-interfaces[0]=eth0# 忽略eth0, 支持正则表达式1

因此,第一种方案就是通过配置application.properties让应用忽略无效的网卡。

(2)、配置host

当网查遍历逻辑都没有找到合适ip时会走JDK的InetAddress.getLocalHost()。该方法会返回当前主机的hostname, 然后会根据hostname解析出对应的ip。因此第二种方案就是配置本机的hostname和/etc/hosts文件,直接将本机的主机名映射到有效IP地址。

(3)、手工指定IP(推荐)

#只使用站点本地地址
spring.cloud.inetutils.use-only-site-local-interfaces=true
#注册时使用ip而不是主机名
eureka.instance.prefer-ip-address=true

或者添加以下配置:

# 指定此实例的ipeureka.instance.ip-address=#

注册时使用ip而不是主机名eureka.instance.prefer-ip-address=true


3、如果使用Zuul做路由分发,使用Ribbon做负载均衡器时,如果要设置请求超时时间时,路由超时时间应大于Ribbon超时时间,以下是Zuul配置

    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
    ribbon:
   ConnectTimeout: 3000
    ReadTimeout: 60000

4、hystrix断路超时时间大于等于Ribbon等客户端请求超时时间


5、Spring Boot Actuator提供了/health端点,该端点可展示应用程序的健康信息,只有将该端点中的健康



状态传播到Eureka Server就可以了,实现这点很简单,只需为微服务配置如下内容:


#开启健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled = true
如果需要更细粒度健康检查,可实现com.netflix.appinfo.HealthCheckHandler接口

   

   

   


原创粉丝点击