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
下一篇: TCP之上传图片并给出反馈