当前位置: 首页 > news >正文

Spring Cloud 之Feign

前言

Feign是一个声明式的Web服务客户端,使得编写HTTP客户端变得更简单。在Java程序中,只需要在方法前加上@FeignClient注解,Feign就会自动创建一个HTTP客户端,向指定的URL发送请求。

核心概念

1、注解:在服务接口方法上使用注解来描述HTTP请求和参数信息。比如@GetMapping、@PostMapping等。

2、配置:在服务接口或方法上使用配置来描述HTTP请求的配置信息。比如@RequestParam来描述请求参数、@RequestHeader来描述请求头信息等。

3、拦截器:在服务接口或方法上使用拦截器来处理HTTP请求和响应。比如Feign的ErrorDecoder用于处理请求异常、Logger用于记录请求和响应日志等。

底层原理

1、动态代理:Feign使用了动态代理技术,在运行时根据注解和配置生成代理对象,从而实现对HTTP请求的封装和处理。

2、负载均衡:Feign支持多种负载均衡策略,比如随机、轮询、最少活跃调用等。通过在服务接口或方法上添加@LoadBalanced注解,即可开启负载均衡功能。

3、连接管理:Feign使用了连接池技术来管理HTTP连接,以提高请求性能。通过在配置文件中设置connection-pooling参数,可以启用连接池功能。

4、自定义拦截器:Feign支持自定义拦截器,通过实现Feign.Builder中的Interceptor接口,可以实现对HTTP请求和响应的处理。

Feign实战项目代码

1、首先,你需要定义一个 Feign 接口,声明了所有需要调用的方法和参数。

public  interface  UserService  {@GetMapping("/user/{id}")   User  getUserById(@PathVariable  Long  id);@PostMapping("/user")   User  addUser(@Valid  @RequestBody  User  user);@PutMapping("/user/{id}")   User  updateUser(@PathVariable  Long  id,  @Valid  @RequestBody  User  user);@DeleteMapping("/user/{id}")   void  deleteUser(@PathVariable  Long  id);   
}

在上面的代码中,我们定义了一个 UserService 接口,它包含了四个方法:getUserById、addUser、updateUser 和 deleteUser。

2、接下来,你需要定义一个 Feign 配置类,用于配置 Feign 的实例。这个类需要指定 Feign 的实例地址和端口号。

@Configuration   
public  class  FeignConfig  {@Value("${api.url}")   private  String  apiUrl;@Bean   public  RestTemplate  restTemplate()  {   RestTemplate  restTemplate  =  new  RestTemplate();   restTemplate.setConnectionFactory(new  NioRestTemplate());   return  restTemplate;   }@Bean   public  FeignClientFactory<UserService>  userServiceFactory()  {   FeignClientFactory<UserService>  clientFactory  =  new  FeignClientFactory<>();   clientFactory.setRestTemplate(restTemplate());   return  clientFactory;   }   
}

在上面的代码中,我们定义了一个名为 apiUrl 的配置属性,用于指定 Feign 的实例地址。然后,我们定义了一个名为 restTemplate 的 Bean,用于创建 Feign 的实例。

3、最后,你需要在 Spring Cloud 项目中创建一个 Feign 客户端,用于调用远程服务。

@RestController   
@RequestMapping("/api")  {@Autowired   private  FeignClientFactory<UserService>  userServiceFactory;@GetMapping   public  User  getUserById(@PathVariable  Long  id)  {   User  user  =  userServiceFactory.getClient().getUserById(id);   return  user;   }@PostMapping("/user")   public  User  addUser(@Valid  @RequestBody  User  user)  {   User  addedUser  =  userServiceFactory.getClient().addUser(user);   return  addedUser;   }@PutMapping("/user/{id}")   public  User  updateUser(@PathVariable  Long  id,  @Valid  @RequestBody  User  user)  {   User  updatedUser  =  userServiceFactory.getClient().updateUser(id,  user);   return  updatedUser;   }@DeleteMapping("/user/{id}")   public  void  deleteUser(@PathVariable  Long  id)  {   userServiceFactory.getClient().deleteUser(id);   }   
}

在上面的代码中,我们定义了一个名为 api 的 RestController,它包含了五个接口,分别是 getUserById、addUser、updateUser、deleteUser 和 deleteUser。

通过以上步骤,你就可以在 Spring Cloud 项目中使用 Feign 实现服务间调用了。

http://www.lryc.cn/news/212860.html

相关文章:

  • 通用开源自动化测试框架 - Robot Framework
  • css position属性与js滚动
  • python内置模块hashlib对于字符串的加密解密加盐
  • 获取客户端请求IP及IP所属城市
  • 【洛谷 P1106】删数问题 题解(贪心+字符串)
  • 【Python · PyTorch】线性代数 微积分
  • 建模和图表工具:Software Ideas Modeler Crack
  • Android开发,车载通讯应用——binder通讯原理解析
  • [算法]求n!在m进制下末尾有多少个0
  • mysql之用户管理、权限管理、密码管理
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • Mac上具好用的屏幕录像工具(Omi录屏专家)Screen Recorder By Omi Mac 下载安装详细教程
  • 牛客网刷题-(8)
  • oracle 重启步骤及踩坑经验
  • 处理mysql数据量大查询缓慢问题(最少百万才有差别)
  • element-plus走马灯不显示
  • 【精】UML及软件管理工具汇总
  • 【uniapp+vue3】scroll-view实现纵向自动滚动及swiper实现纵向自动滚动
  • this.refs[‘tagInput‘].refs.input.focus()和this.$refs[‘tagInput‘].focus()区别
  • 电脑硬件坏了,如何维修?
  • elementplus日期时间选择器组件显示很窄
  • 第三方软件测评选择远程测试好还是现场测试好?
  • HTTPS协议:保障网络安全的加密通信协议
  • C++设计模式_21_Iterator 迭代器(理解;面向对象的迭代器已过时;C++中使用泛型编程的方式实现)
  • 有一个 3*4 的矩阵,找出其中值最大的元素,及其行列号
  • 磁盘的命令
  • 一张图讲清楚业务稳定性要如何做:SRE体系化稳定性方案
  • 安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)
  • 11.与JavaScript深入交流-[js一篇通]
  • Ubuntu 搭建 DHCP ivp6 server 步骤