openFeign初始入门及高级特性

openFeign初始入门及高级特性

openFeign集成了loadbanlance,它是声明式的web客户端,是当前微服务之间调用的事实标准,

  • 支持负载均衡
  • 支持sentinel和它的fallback
  • 可插拔的注解支持
  • 支持可插拔的HTTP编码器和解码器
  • 支持HTTP请求和相应的压缩

初始入门

需导入的依赖 因为要使用openfeign 要先引入服务注册中心这里用的是consul

   <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    <!--SpringCloud consul discovery-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

导入yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer-openfeign-order
  ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        prefer-ip-address: true #优先使用服务ip进行注册
        service-name: ${spring.application.name}

需要在启动类

@SpringBootApplication
@EnableFeignClients //启用Feign服务
@EnableDiscoveryClient //启用consul的服务发现 
public class MainOpenFeign80 {
    public static void main(String[] args) {

        SpringApplication.run(MainOpenFeign80.class,args);
    }
}

创造一个接口 在上面声明@FeignClient(value = “提供者微服务名称”)

这里暴露出的接口 会通过consul 直接调用到 对应的提供者微服务

@FeignClient(value = "cloud-payment-service")
public interface PayFeignApi
{
    /**
     * 新增一条支付相关流水记录
     * @param payDTO
     * @return
     */
    @PostMapping("/pay/add")
    public ResultData addPay(@RequestBody PayDTO payDTO);

    /**
     * 按照主键记录查询支付流水信息
     * @param id
     * @return
     */
    @GetMapping("/pay/get/{id}")
    public ResultData getPayInfo(@PathVariable("id") Integer id);

    /**
     * openfeign天然支持负载均衡演示
     * @return
     */
    @GetMapping(value = "/pay/get/info")
    public String mylb();
}

高级特性

1.超时控制

Spring Cloud OpenFeign 官网出处

请求默认超时时间是60s就会自动返回一个结果

spring:
    cloud:
        openfeign:
            client:
                config:
                 #default代表全局配置 单体服务配置可以换成服务的名字
                    default:
                     #连接超时时间
                        connectTimeout: 5000
                        #读取超时时间
                        readTimeout: 5000
                        loggerLevel: basic

2.重试机制

Spring Cloud OpenFeign does not provide the following beans by default for feign

feign客户端默认重试是关闭的 所以只要一次请求失败 就会直接返回失败结果

重写这个方法 就会开启重试机制

@Configuration
public class FeignConfig {
    @Bean
    public Retryer myRetryer()
    {
        //return Retryer.NEVER_RETRY; //Feign默认配置是不走重试策略的

        //最大请求次数为3(1+2),初始间隔时间为100ms,重试间最大间隔时间为1s
        return new Retryer.Default(100,1,3);
    }
}

3.OpenFeign中http client

OpenFeign中http client

如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求,

由于默认HttpURLConnection没有连接池、性能和效率比较低,如果采用默认,性能上不是最牛B的,所以加到最大。

推荐使用 httpclient5

maven 依赖

<!-- httpclient5-->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>
<!-- feign-hc5-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-hc5</artifactId>
    <version>13.1</version>
</dependency>


导入yaml

#  Apache HttpClient5 配置开启
spring:
  cloud:
    openfeign:
      httpclient:
        hc5:
          enabled: true

4.对请求和响应进行GZIP压缩

作用是节约带宽

对请求和响应进行GZIP压缩

Spring Cloud OpenFeign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。

通过下面的两个参数设置,就能开启请求与相应的压缩功能:

spring.cloud.openfeign.compression.request.enabled=true

spring.cloud.openfeign.compression.response.enabled=true

细粒度化设置

对请求压缩做一些更细致的设置,比如下面的配置内容指定压缩的请求数据类型并设置了请求压缩的大小下限,

只有超过这个大小的请求才会进行压缩:

spring.cloud.openfeign.compression.request.enabled=true

spring.cloud.openfeign.compression.request.mime-types=text/xml,application/xml,application/json #触发压缩数据类型

spring.cloud.openfeign.compression.request.min-request-size=2048 #最小触发压缩的大小

yaml导入

#  Apache HttpClient5 配置开启
spring:
  cloud:
    compression:
        request:
          enabled: true
          min-request-size: 2048 #最小触发压缩的大小
          mime-types: text/xml,application/xml,application/json #触发压缩数据类型
        response:
          enabled: true

5.日志打印功能

1.作用

对Feign接口的调用情况进行监控和输出

2.日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息;

FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。

3.创建FeignConfig

@Configuration
public class FeignConfig
{
 
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

导入yaml

logging:
  level:
    com:
      atguigu:
        cloud:
          apis:
            PayFeignApi: debug

com.atguigu.cloud.apis.PayFeignApi 是带@FeignClient(value = “cloud-payment-service”)注解的路径

表示对这个接口采取日志监控功能

  • 33
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

humannoid

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

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

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

打赏作者

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

抵扣说明:

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

余额充值