Ribbon的相关配置
Feign默认整合了Ribbon能够实现负载均衡,我们可以通过配置Ribbon,自定义各个服务的调用方式。接下来,我们从全局配置和指定服务配置两个方面介绍如何在Spring Cloud Feign中进行Ribbon的相关配置。
1、 全局配置
Ribbon的全局配置其实非常简单,我们可以直接在application.yml配置文件中,使用ribbon.<key>=<value>的方式设定ribbon的各项默认参数,示例代码如下:
ribbon:
ConnectTimeout: 5000 #设置连接超时时间,默认为1s
ReadTimeout: 5000 #设置读取超时时间
OkToRetryOnAllOperations:true # 对所有操作请求都进行重试
MaxAutoRetries:1 # 对当前实例的重试次数
MaxAutoRetriesNextServer:2 # 切换实例的重试次数
上述代码中,ConnectTimeout用于设置连接超时时间,ReadTimeout用于设置读取操作的超时时间, MaxAutoRetries表示超时之后,重新对当前实例进行访问的次数,我们设置了超时之后,首先会继续尝试访问当前实例1次,如果还是失败,则会报SocketTimeoutException异常。
接下来,为了测试设置的ConnectTimeout参数是否生效,我们在服务提供者eureka-provider的hello()方法中添加下列代码:
try{
Thread.sleep(6000);
}catch(Exception e){
}
由于ConnectTimeout参数设置的超时时间是5秒,上述代码设置的程序等待时间是6秒,这样必然会导致出现超时。此时使用浏览器访问http://localhost:8764/hello
,发现消费者eureka-feign-client的控制台会报java.net.SocketTimeoutException: Read timed out。
2、 指定服务配置
大多数的情况下,我们对于服务调用的超时时间可能会根据实际服务的特性做一些调整,所以仅仅依靠默认的全局配置是不行的。使用Spring Cloud Feign时,如果要对各个服务消费者进行不同配置,可以采用<client>.ribbon.key=value的格式进行设置,示例代码如下:
eureka-provider:
ribbon:
ConnectTimeout: 5000
ReadTimeout: 2000
OkToRetryOnAllOperations: true
MaxAutoRetries: 2
MaxAutoRetriesNextServer:2
上述代码中,我们在ribbon属性的前面添加了服务名称eureka-provider,表示上述配置是针对eureka-provide服务的。
Feign结合Ribbon能够实现负载均衡。除此之外,Feign还能够结合Hystrix实现熔断。关于在Spring Cloud Feign中Hystrix的配置,将在第5章中进行详细讲解。