Feign功能详解、使用步骤、代码案例

简介:Feign是Netflix开发的声明式,模板化的HTTP客户端,简化了HTTP的远程服务的开发。Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestTemplate实现Http调用,使用Ribbon实现负载均衡。我们可以看成 Feign = RestTemplate+Ribbon

目录

1、Feign替代RestTemplate

1.1 Feign的使用步骤

2、自定义配置

2.1 Feign部分自定义配置

2.2 修改Feign自定义配置

2.2.1 方式一

2.2.2 方式二

3、Feign性能优化

3.1 Feign性能优化原理

3.2 实现Apache HttpClient

4、Feign最佳实践

4.1 方式一(继承)

4.2 方式二(抽取)

4.2.1 方式二(抽取)案例

4.3 Feign的包扫描

5、总结


1、Feign替代RestTemplate

1.1 Feign的使用步骤

图 1.1-1 Feign的使用步骤

步骤一

步骤二

上图中展示的是Feign的调用步骤,相较于RestTemplate法更加的方便,代码更简洁。

2、自定义配置

2.1 Feign部分自定义配置

图 2.1-1 部分自定义配置
上图中展示的是Feign运行的配置

2.2 修改Feign自定义配置

2.2.1 方式一
图 2.2.1-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法
2.2.2 方式二
图 2.2.2-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法

3、Feign性能优化

3.1 Feign性能优化原理

图 3.1-1 Feign性能优化原理
上图中展示的Feign性能优化的原因,即默认情况下Feign底层不支持连接池,所以在发送请求时性能会受到影响,这里通过改变底层实现达到支持连接池的目的

3.2 实现Apache HttpClient

图 3.2-1 实现Apache HttpClient
上图中展示的是改变Feign底层,实现Apache HttpClient,从而让微服务连接支持连接池,提高性能

4、Feign最佳实践

4.1 方式一(继承)

图 4.1-1 方式一(继承)

上图中展示的是通过继承的方式实现统一接口:

即将微服务中的 FeignClient 定义的接口方法和被访问的提供者 Controller 中的方法统一一个标准

4.2 方式二(抽取)

图 4.1 方式一(抽取)
上图中展示的是通过抽取的方式实现统一接口,不好的一点就是在抽取出来的独立模块中集合了大量的函数,当消费者引用的有许多的函数使用不上的,所以产生了代码冗余,但是这里还是建议使用方式二作为标准。
4.2.1 方式二(抽取)案例
图 4.2.1-1 (抽取)案例步骤一

实现最佳实践方式二的步骤如下:

  1. 首先创建一个module,命名为feign-api,然后引入feignstarter依赖
  2. order-service中编写的UserClientUserDefaultFeignConfiguration都复制到feign-api项目中
  3. order-service中引入feign-api的依赖
  4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
  5. 重启测试
上图展示的便是详细步骤,按照这样操作就可实现模块的抽取

4.3 Feign的包扫描

4.3-1 Feign的包扫描两种方式
这里还是建议使用方式二,因为这样不会有代码冗余

5、总结

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Feign是一个HTTP客户端,它可以将HTTP请求转发到其他微服务。使用Feign可以使得微服务之间的调用更加简单和优雅。下面是使用Feign的详细步骤: 1. 添加依赖 在使用Feign之前,需要先在pom.xml文件中添加Feign的依赖,如下所示: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 创建Feign接口 在使用Feign时,需要先创建一个接口,用于定义需要调用的其他微服务的API。这个接口的方法签名和被调用的微服务的API方法签名必须一致。例如,如果需要调用另一个微服务的getUserInfo方法,那么Feign接口的定义如下所示: ```java @FeignClient(name = "user-service") public interface UserService { @GetMapping("/user/getUserInfo") public UserInfo getUserInfo(@RequestParam("userId") String userId); } ``` 在这个例子中,@FeignClient注解用于指定需要调用的微服务的名称,name属性的值为"user-service",这个值需要和被调用的微服务的spring.application.name属性的值一致。接着,定义了一个getUserInfo方法,这个方法的签名与被调用的微服务的getUserInfo方法的签名一致,使用@GetMapping注解标注请求的路径,这里的路径为"/user/getUserInfo"。最后,定义了一个UserInfo类型的返回值,用于封装被调用的微服务的返回结果。 3. 注入Feign接口 在需要使用Feign调用其他微服务的地方,可以直接注入Feign接口,例如在Service层中注入上面定义的UserService接口: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserService userService; public UserInfo getUserInfo(String userId) { return userService.getUserInfo(userId); } } ``` 在这个例子中,UserServiceImpl类注入了UserService接口,并且调用了getUserInfo方法。在实际运行时,Feign会根据接口的定义动态生成一个HTTP客户端,并将请求转发到其他微服务。 4. 启用Feign使用Feign时,需要在Spring Boot应用程序的启动类上添加@EnableFeignClients注解,如下所示: ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在这个例子中,@EnableFeignClients注解用于启用Feign客户端。在启用Feign之后,Spring Boot会自动扫描所有标注了@FeignClient注解的接口,并为它们动态生成HTTP客户端。 以上就是使用Feign的详细步骤使用Feign可以使得微服务之间的调用更加简单和优雅,提高代码的复用性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值