Feign微服务负载均衡和容错率
功能说明:
集成了Hystrix和Ribbon,并提供了声明式消费者客户端
功能:为微服务架构提供了Provider之间的负载均衡和系统容错率
如何使用:
创建一个单独的Feign项目,加入依赖:OpenFeign,Eureka Discovery Client,Hystrix
yml配置:
spring:
application:
name: feign
server:
port: 3001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
主程序注解:
@EnableFeignClients
@SpringCloudApplication
public class Sp09FeignApplication {
public static void main(String[] args) {
SpringApplication.run(Sp09FeignApplication.class, args);
}
}
声明式客户端接口:
@FeignClient(name = "item-service")//这里写的是服务名称
public interface ItemFeignClient {
//调用后台商品服务,需要指定商品服务的路径
//这里是把方法中的参数去填充路径中的占位符
//这里的注解只起到标识作用,处理注解的不是SpringMVC,而是Feign,实现的也是不同的功能
//相当于访问:item-service/orderId
@GetMapping("/{orderId}")
public JsonResult<List<Item>> getItems(@PathVariable String orderId);
}
负载均衡和重试
Feign默认已经启用了负载均衡和重试
也可以在yml中配置
#对所有服务通用
ribbon:
MaxAutoRetry: 1
#可以先加服务名,再加配置,只对针对服务有效用
#Feign不需要在工厂对象里加,可以直接在yml中加超时时间
item-service:
ribbon:
ReadTimeout:1500
降级和熔断
Feign默认不启用降级和熔断,需要添加配置启用hystrix(不推荐)
yml:
feign:
hystrix:
enabled: true
默认1秒会降级返回,如果没有降级方法,会显示白板页
Feign的降级方法和Hystrix不太一样
需要在声明式客户端接口的注解上,指定一个fallback方法,注意这里没有引号
@FeignClient(name = "item-service", fallback = ItemFeignClientFB.class)
public interface ItemFeignClient {
//调用后台商品服务,需要指定商品服务的路径
//这里是把方法中的参数去填充路径中的占位符
//这里的注解只起到标识作用,处理注解的不是SpringMVC,而是Feign,实现的也是不同的功能
//相当于访问:item-service/orderId
@GetMapping("/{orderId}")
public JsonResult<List<Item>> getItems(@PathVariable String orderId);
@PostMapping("/decreaseNumber")
public JsonResult decreaseNumber(@RequestBody List<Item> items);
}
然后创建ItemFeignClientFB,继承ItemFeignClient,实现抽象方法即可