欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringCloud Feign 详解 快速上手

程序员文章站 2022-04-15 18:38:57
SpringCloud Feign 之 Fallback初体验在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件。Feign是声明式,模板化的HTTP客户端,可以帮助我们更方便快捷调用HTTP API。本文主要针对Feign的熔断机制Fallback进行简单介绍。Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值。1.引入Feignpom依赖包 org...

SpringCloud Feign 新手入门快速上手

在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件。Feign是声明式,模板化的HTTP客户端,可以帮助我们更方便快捷调用HTTP API。
比httpClient简便很多,代码量也减少很多。

1.引入Feign
pom依赖包

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.7.RELEASE</version>
</dependency>

启动类Application增加注解

@SpringBootApplication(scanBasePackages = {"com.xiaoqiang.feigncomsumer"})
@EnableFeignClients(basePackages = {"com.xiaoqiang.feigncomsumer"})
@EnableEurekaClient
public class FeigncomsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeigncomsumerApplication.class, args);
    }

}

接口类配置

1.调用第三方接口

@FeignClient(name = "test", url = "https://test.cn")
public interface FeignService {
 
    @RequestMapping(method = RequestMethod.POST, value = "/user/auth",consumes = "application/x-www-form-urlencoded;charset=UTF-8")
    String ssoCheck(String token);
}

2.调用自己eureka上的服务,记得启动本地注册到注册中心

eureka:
	enable:true
@FeignClient(value="被调用方的服务名")
public interface UserAuthService {
    @RequestMapping(method = RequestMethod.GET, value = "/user/auth")
    String userAuth(@RequestParam(name="ticket") String ticket);
}
 
 
@RestController
public class UserAuthController {
 
    @Autowired
    UserAuthService userAuthService ;
 
    @GetMapping("/user/auth")
    public Result userAuth(String ticket){
        String rs = userAuthService.userAuth(ticket);
        return Result.ok(rs);
    }
}

2.Fallback配置
FallBack类
这里有一点需要注意的是@RequestMapping中的value,也就是url,不能与接口类中的url一样。因为一个URL不能映射到两个方法上。

@Component
@RequestMapping("fallback/")
public class  FallBackStudentClient implements StudentOtherClient {

    @Override
    public Student getStudent(String name) {
        Student student = new Student();
        student.setAge(0);
        student.setName("fall back test");
        return student;
    }
}

接口类

在@FeignClient注解的参数指定Fallback类,且需要@Component注解。

@Component
@FeignClient(name = "${feign.provider}",path = "/feignprovider"
        ,fallback = FallBackStudentClient.class)
public interface StudentOtherClient {
    @GetMapping("/stud/getStudent")
    Student getStudent(@RequestParam(required = false, name = "name") String name);
}

打开Hystrix熔断功能

在bootstrap.yml中增加Hystrix配置。其中Hystrix的默认time-out时间为1s。

feign:
  name: MFRAMEWORK-PROVIDER
  provider: feignprovider
##开启Hystrix断路器
  hystrix:
    enabled: true

注:多个接口上的@FeignClient(“相同服务名”)会报错,overriding is disabled。
解决:

在application.yml中配置:

spring
	main:  allow-bean-definition-overriding: true

本文地址:https://blog.csdn.net/qq_39190679/article/details/109259108