Spring Cloud实战
上QQ阅读APP看书,第一时间看更新

3.4 Eureka的常用配置信息

这里我们将讲述查看Eureka客户端和服务器端配置信息的方法,并在此基础上讲述一些项目里常用的配置参数的用法。

3.4.1 查看客户端和服务器端的配置信息

在作者的机器上,本地仓库在C:\Documents and Settings\Administrator\.m2\中,所以之后的叙述就以此为准,大家可以对应地找到自己Maven的本地仓库。

在~./.m2\repository\org\springframework\cloud\spring-cloud-netflix-eureka-client\1.3.1.RELEASE这个目录里,可以看到spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar文件,在大家的机器上,也能找到版本号相同或不同的这个jar包。

解开这个jar文件,能在META-INF目录里找到spring-configuration-metadata.json,在其中就用json格式的文件记录了所有的Eureka客户端的配置信息,我们来看一下部分代码。

在第4行中,我们能看到该属性的名字,即eureka.client.allow-redirects;第2行代码定义了该属性所在的类名;在第3行代码定义了该属性的默认值;第6行定义了该属性的类型。

同样的,在作者机器上也存在着spring-cloud-netflix-eureka-server-1.3.1.RELEASE.jar这个文件,解开它之后,在META-INF目录里能看到spring-configuration-metadata.json,在其中包含着服务器端的所有配置信息。

3.4.2 设置心跳检测的时间周期

Eureka客户端会定时向服务器端发送心跳,以此证明该站点可用,这个值默认是30秒,在实际应用里,我们可以通过修改eureka.instance.lease-renewal-interval-in-seconds属性来改变这个值。具体的做法是,在客户端的application.yml里,添加如下部分的代码。

关于心跳,还有另外一个lease-expiration-duration-in-seconds属性,默认是90秒,这说明如果服务器端有90秒没收到客户端的心跳,就会把它从服务列表里删除。

3.4.3 设置自我保护模式

在Eureka服务器端,我们能看到eureka.server.enable-self-preservation参数,用它可以指定是否启动保护模式,默认值是true。

从上文中我们已经知道,如果Eureka服务端在一定的时间段内没有接收到某个客户端服务提供者实例的心跳,那么Eureka服务端将注销该实例,这个时间段的默认值是90秒。

这样做能避免因服务不可用而导致的“错误扩展”,从而能把错误的影响控制在一个较小的范围内。但现实中可能会发生这种情况:服务器端和客户端之间联系不上不是因为客户端服务不可用,而是因为当前网络确实有故障(服务提供者本身没问题),这时就不应当注销服务了。

Eureka服务器能通过“自我保护模式”来处理这类问题,根据官方文档,如果在15分钟内,超过85%的客户端实例都没有发来正常的心跳,那么Eureka服务器就认为出现了网络故障,这时就会进入自我保护模式。

进入该模式后,Eureka Server就会保护服务注册表中的信息,不再继续删除注册中心里的服务列表数据。当网络故障恢复后,就会自动退出自我保护模式。

从上述描述来看,自我保护模式能提升Eureka集群的健壮性,所以如果没有特殊的情况,不建议通过把eureka.server.enable-self-preservation设置成false来关闭自我保护模式。

3.4.4 其他常用配置信息

在表3.1里,我们归纳了在客户端常用的一些配置信息,它们一般是配置在Eureka客户端。

表3.1 Eureka客户端常用配置信息归纳表

在表3.2里,我们归纳了在服务器端常用的一些配置信息,这些参数的影响面都比较大,所以没有特殊理由,不建议修改。同样的,服务端的参数一般都会用默认值,没事不会轻易修改。

表3.2 Eureka服务器端常用配置信息归纳表