springcloud学习---Feign学习记录_01

Feign学习记录

简介:声明式rest客户端,提供了http请求的模板,通过编写简单的接口和插入注解,就可以定义好http请求的参数格式地址等信息。可以和Eureka和Ribbon组合使用以支持负载均衡。

一、集成Feign

1、引入pom依赖

<!--引入Feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

2、在启动类上添加注解 EnableFeignClients

@EnableEurekaClient
@SpringBootApplication

//如果Feign和接口定义不在同一个包下面,需要指定扫描的包。
@EnableFeignClients(basePackages = "com.studycloud.microservicesimpleconsumeuser.client")
public class MicroserviceSimpleConsumeUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceSimpleConsumeUserApplication.class, args);
    }

    @Bean
    @LoadBalanced//这个注解会自动构造LoadBalancerClient接口的实现类并注册•到ioc
    public RestTemplate getR(){
        return new RestTemplate();
    }
}

3、在刚才的启动类注解EnableFeignClients对应的包下面编写client接口

//value代表服务实例信息,
//path代表该服务对应的controller的RequestMapping地址
@FeignClient(value = "LFQ-PROVIDE-8081",path = "/providedata")
public interface ProvideClient {

	//这里的接口指的是服务提供者所提供的接口服务
    @RequestMapping("getUser")
    UserInfo getUser(String name);

    @RequestMapping("getData")
    public String getData();
}

4、调用接口成功,同时也实现了负载

//注入client Bean
@Autowired
private ProvideClient provideClient;

@RequestMapping("testFeign_1")
public String testFeign_1(){
    return provideClient.getData();
}

在这里插入图片描述

二、日志配置

1、编写日志类,Logger.Level有四种日志级别,如下代码清单:

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfiguraion {

    @Bean
    Logger.Level frignLoggerLevel(){

        //NONE,    不输出日志
        //BASIC,   只输出请求方法的URL和响应的状态码以及接口执行的时间
        //HEADERS, 将BASIC信息和请求头信息输出
        //FULL;    输出完整的请求信息
        return Logger.Level.FULL;
    }
}

2、在client中指定日志配置信息 configuration = FeignConfiguraion.class

//value          代表服务实例信息,
//path           代表该服务对应的controller的RequestMapping地址
//configuration  日志配置类
@FeignClient(value = "LFQ-PROVIDE-8081",path = "/providedata",configuration = FeignConfiguraion.class)
public interface ProvideClient {

    @RequestMapping("getUser")
    UserInfo getUser(String name);

    @RequestMapping("getData")
    public String getData();
}

3、在配置文件中配置日志的级别才能正常输出日志信息,配置如下:

logging:
  level:
	##表示client层
    com.studycloud.microservicesimpleconsumeuser.client: debug

4、调用client接口,查看日志如下:
在这里插入图片描述

三、Basic认证配置

自定义属于自己的认证方式,其实就是定义一个拦截器,在请求接口之前做认证操作,往请求头里面设置认证之后的信息,通过实现RequestInterceptor接口,重写apply方法,这样当Feign去请求接口的时候每次都会县进入apply方法,如下代码清单所示:

public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
    
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //在这里做自己的认证业务即可
        System.out.println(1);
    }
}

在之前的FeignConfigurtion中配置认证拦截器,请自行测试

@Bean
public FeignBasicAuthRequestInterceptor basicAuthRequestInterceptor(){
    return new FeignBasicAuthRequestInterceptor();
}

四、Feign配置超时时间

在之前的FeignConfigurtion中配置

//Feign配置超时时间
@Bean
public Request.Options options(){
    // 第一个参数:配置连接超时时间 默认是10 * 1000
    // 第二个参数:读取超时时间 默认是 60 * 1000
    return new Request.Options(5000,10000);
}

五、客户端组件配置

Feign中默认使用HttpClient配置来进行接口调用,可以集成别的组件替换HttpClient,配置Okhttp只需要引入Okhttp依赖,然后修改配置文件,禁用htpclient,开启okhttp,

<!--引入okhttp-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>
##配置使用okhttp
feign:
  ##禁用httpclient
  httpclient:
    enable: false
  ##配置使用okhttp
  okhttp:
    enable: true

六、GZIP压缩配置

feign:
  ##禁用httpclient
  httpclient:
    enable: false
  ##配置使用okhttp
  okhttp:
    enable: true
  ##Feign压缩配置,压缩数据,减少通信中的性能损耗,默认是禁止的
  compression:
    request:
      ##启用压缩
      enable: true
      ##压缩的类型
      mime-types: text/xml,application/xml,application/json
      ##最小压缩值的标准
      min-request-size: 2048
    ##启用压缩
    response: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值