目录
一.概念
二.使用
2.1依赖
2.2启动类注释
2.3.创建service包,写接口
2.4.生产者方法
2.5效果
三.openfeign的服务降级
3.1理论
3.2使用
一.概念
Feign是Spring Cloud提供的声明式、模板化的HTTP生产者,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。Spring Cloud 常见的集成方式是使用Feign+Ribbon技术来完成服务间远程调用及负载均衡的。
前端传值
后端传值
二.使用
2.1依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2.2启动类注释
@EnableFeignClients//启动feign
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaCustomerApplication {...
}
2.3.创建service包,写接口
@FeignClient的属性name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。
@Service
@FeignClient(name = "PROVIDER")//name=生产者远程服务的名字
public interface UserService {@RequestMapping("/getuser/{name}")public User getuser(@PathVariable("name") String name);
}
2.4.生产者方法
通过消费者中的service接口找到生产者中对应路径的方法
@RequestMapping("/getuser/{name}")public User getuser(@PathVariable("name") String name){User user = new User();user.setUsername(name);return user;}
2.5效果
三.openfeign的服务降级
3.1理论
在使用OpenFeign进行微服务间的调用时,熔断和降级是常用的服务保护机制,用于提高系统的可靠性和稳定性。
熔断(Circuit Breaker)
熔断机制在微服务架构中用于防止错误的传播和快速失败恢复。当远程服务不可用或响应时间过长时,熔断器会打开并临时停止向该服务的请求,避免资源浪费和系统雪崩。OpenFeign集成了Hystrix或者Resilience4j等熔断器,通过配置熔断策略可以实现对服务调用的熔断保护。
降级(Fallback)
降级机制是指当远程服务出现问题时,提供一个备用方案来保证系统的可用性。在OpenFeign中,可以通过定义降级逻辑或者提供默认返回值来实现服务降级。一旦远程服务调用失败或超时,系统将使用预先定义的降级逻辑或者默认返回值来代替原本的结果,确保系统能够正常运行。在消费者和生产者调用时,一旦生产者发生错误、异常或超时,自动执行一段业务逻辑。
3.2使用
1.添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency>
2.配置文件
spring:cloud:openfeign:circuitbreaker:enabled: true
3.专门做服务降级的类
继承FallbackFactory接口,实现所有接口方法,专门处理接口出错后的返回值
@Component
public class MyFeignClientFallbackFactory implements FallbackFactory<UserService> {@Overridepublic UserService create(Throwable cause) {return new UserService() {@Overridepublic String loginProvider(User user) {System.out.println("请重新登录");return "请重新登录";}@Overridepublic String getuser(String name) {System.out.println("请稍作等待");return "请稍作等待";}};}
}
4.在service中加入fallbackFactory
@FeignClient属性fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码。
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。
@Service
@FeignClient(name = "PROVIDER",fallbackFactory= MyFeignClientFallbackFactory.class)//name=生产者远程服务的名字,fallbackFactory一旦出现错误进入这个类中
public interface UserService {@RequestMapping("/loginProvider")public String loginProvider(User user);@RequestMapping("/getuser/{name}")public String getuser(@PathVariable("name") String name);
}
效果
关闭所有生产者,访问接口。