Feign微服务负载均衡和容错率
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,实现抽象方法即可
上一篇:
IDEA上Java项目控制台中文乱码