Feign的使用

本文详细介绍了如何在微服务环境中使用Feign进行远程调用。从Feign的基本概念、添加依赖、创建Feign客户端接口,到自定义配置、性能优化,以及最佳实践,包括模块化管理Feign接口,解决非扫描包内FeignClient的使用问题,提供了全面的步骤和配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于Feign远程调用

Feign说明

Feign是一个声明式的http客户端,其作用是帮助我们优雅的实现http请求的发送

官网地址:https://github.com/OpenFeign/feign

Feign的使用

  1. 修改服务的pom.xml文件添加Feign依赖
<!--feign客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 找到该服务的启动类添加注解开启Feign的功能
@EnableFeignClients/*开启Feign的功能*/
  1. 新建Feign客户端包clients,在这个包新建一个接口UserClient用来进行远程调用
@FeignClient("userservice")/*指定服务的名称*/
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);/*从路径获得的参数需要加上@PathVariable注解*/
}
  1. 在service中调用远程服务(RestTemplate和Feign只能使用其中一个)
@Autowired
private OrderMapper orderMapper;

@Autowired
private UserClient userClient;

public Order queryOrderById(Long orderId) {
    // 1.查询订单
    Order order = orderMapper.findById(orderId);
    // 2.使用Feign远程调用
    User user = userClient.findById(order.getUserId());
    // 3.封装user到order
    order.setUser(user);
    // 4.返回
    return order;
}
  1. 修改本服务的名称为原服务名称-abc
orderservice-abc

自定义Feign配置

  1. 配置Feign日志–配置文件方式

在application.yml文中添加以下内容:

feign:
  client:
    config:
      default:  #这里用default就是全局配置,如果写某个服务名称,则针对某个微服务生效
        loggerLevel: FULL
  1. 配置Feign日志–java代码的方式
  • 首先创建一个Feign配置类FeignClientConfiguration,编写方法
public class FeignClientConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC; //设置全局日志等级,调试错误时可以使用FULL,平时不建议使用,因为会消耗性能,BASIC和NONE建议使用
    }
}
  • 是配置类全局生效:在启动类上修改注解@EnableFeignClients指定默认的Feign配置为我们创建的Feign配置
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

Feign的性能优化

  1. 在pom.xml中引入依赖
<!--httpClient的依赖-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>
  1. 在application.yml配置文件中添加以下内容
feign:
  httpclient:
    enabled: true #开启feign对HttpClient的支持
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #每个路径的最大连接数

Feign最佳实践

1.创建一个module,命名为feign-api,然后引入feign的starter依赖

<!--feign客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.将order-service中编写的UserClient、User、FeignConfiguration都复制到feign-api项目中

3.在order-service中引入feign-api的依赖

<!--引入feign的统一API(自己创建的模块)-->
<dependency>
    <groupId>cn.itcast.demo</groupId>
    <artifactId>feign-api</artifactId>
    <version>1.0</version>
</dependency>

4.修改order-service中的所有上述三个组件有关的import部分,改成导入feign-api中的包

5.当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种解决方法

方法一在启动类添加注解指定FeignClient所在包:

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")/*开启Feign的功能*/

方法一在启动类添加注解指定FeignClient字节码:

@EnableFeignClients(clients = {UserClient.class})/*开启Feign的功能*/

6.重启测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vermouth-1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值