Feign的使用

本文介绍了SpringCloud中的Feign框架,包括其概念、如何使用Feign进行远程服务调用,以及如何通过OpenFeign实现服务降级,包括熔断机制和降级策略的配置与实现。
摘要由CSDN通过智能技术生成

目录

一.概念

二.使用

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技术来完成服务间远程调用及负载均衡的。

前端传值

58b704e1571b4c68891a393b66e10686.png

后端传值

bc041ad7aeda4a49931e8632d5068923.png

二.使用

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);
}

24827341230347319ac881811e6e5633.png

9242e23e78fb4294b9ead720dc29dd62.png

2.4.生产者方法

通过消费者中的service接口找到生产者中对应路径的方法

 @RequestMapping("/getuser/{name}")
    public User getuser(@PathVariable("name") String name){
        User user = new User();
        user.setUsername(name);
        return user;
    }

2.5效果

1d21c6eaf8414a00bccde37da06c967a.png

三.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> {
    @Override
    public UserService create(Throwable cause) {
        return new UserService() {
            @Override
            public String loginProvider(User user) {
                System.out.println("请重新登录");
                return "请重新登录";
            }

            @Override
            public 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);
}

效果

关闭所有生产者,访问接口。

306cade22a354e8e838c1eae71bd0e81.png

490c64a6159740fea92cb95ebf6639b9.png

 

  • 32
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随便1007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值