5. http客户端Feign

一、快速使用

  1. 引入依赖

    org.springframework.cloud
    spring-cloud-starter-openfeign

  1. 在启动类上添加注解开启Feign的功能
@MapperScan("cn.ylf.order.mapper")
@EnableFeignClients
@SpringBootApplication
public class OrderApplication {
  public static void main(String[] args) {
    SpringApplication.run(OrderApplication.class, args);
  }
}
  1. 创建一个声明接口
package cn.ylf.order.clients;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author ylf
 * @version 1.0
 */
@FeignClient("userservice")
public interface UserClient {
  @GetMapping("/user/{id}")
  User findById(@PathVariable Long id);
}

  1. 发送请求
@Service
public class OrderService {

  @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;
  }
}

二、自定义配置日志文件

  • 第一种,配置文件方式
feign:
  client:
    config:
      default: # 这里写default就是全局默认配置,如果写服务器名就是针对某个服务器的
        loggerLevel: FULL #日志级别
  • 第二种
    先声明一个bean
public class DefaultFeignConfiguration {
  @Bean
  public Logger.Level logLevel(){
      return Logger.Level.BASIC;
  }
}

然后在@FeignClient或者@EnableFeignClients加上

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)

@FeignClient是针对某个服务,@EnableFeignClients是全局

三、Feign优化
优化:

  • 日志级别尽量用basic
  • 使用HttpClient或OKHttp代替URLConnection
  1. 引入HttpClient依赖
        
            io.github.openfeign
            feign-httpclient
        
  1. 配置连接池
feign:
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

四、Feign最佳实践

  • 第一种,让controller和FeignClient继承同一个接口
  • 第二种,将FeignClient,POJO,Feign的默认配置都定义到一个项目中,供所有消费者使用

第二种实现方式:

  1. 首先创建一个module,命名为feign-api,然后引入feign的依赖
  2. 将order-service中编写的UserClient,User,DefaultFeignConfiguration都复制到feign-api项目中
  3. 在order-service中引入feign-api的依赖
  4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包

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

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

方式二:指定FeignClient字节码

@EnableFeignClients(clients = {UserClient.class})

你可能感兴趣的:(5. http客户端Feign)