http客户端Feign

一、基于Feign远程调用

1、引入Feign依赖
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
2、添加注解开启Feign的功能
@EnableFeignClients()
3、声明远程调用
@FeignClient("userservice")
public interface UserClient {

    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}
4、使用FeignClient调用方法
    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
    }

二、自定义配置

feign.Logger.Level:修改日志级别(NONE、BASIC、HEADERS、FULL)
feign.codec.Decoder:响应结果的解析器(http远程调用的结果做解析)
feign.codec.Encoder:请求参数编码(将请求参数编码,便通过http请求发送)
feign.Contract:支持的注解格式(默认是SpringMVC的注解)
feign.Retryer:失败重试机制(请求失败的重试机制,默认没有,不过会使用Ribbon的重试)
(1)基于配置文件修改日志

feign:
  client:
    config:
      default:
        loggerLevel: FULL #设置显示日志

(2)基于java代码配置

public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)//Java代码添加日志

三、性能优化

1、使用支持连接池
        
        
            io.github.openfeign
            feign-httpclient
        
feign:
  client:
    config:
      default:
        loggerLevel: BASIC #设置显示日志
  httpclient:
    enabled: true #支持httpclient
    max-connections: 200
    max-connections-per-route: 50
2、日志级别:使用NONE或BASIC

四、Feign最佳实践

将FeignClient抽取问独立模块,并且把接口有关的POJO、默认的Feign配置都放在这个模块中,提供给所有消费者使用

(1)创建一个module、命名为feign-api,然后引入feign的starter依赖
(2)将代码中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
(3)在模块中引入feign-api的依赖

//加载UserClient
@EnableFeignClients(clients = {UserClient.class})

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