前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Feign服务之间的调用

Spring Cloud Feign服务之间的调用

作者头像
芥末鱿鱼
发布2020-09-22 10:29:11
3K0
发布2020-09-22 10:29:11
举报
文章被收录于专栏:玩转 Spring Cloud

Spring Cloud Feign服务之间的调用

文章目录

从服务之间调用方式说起…

微服务架构时代, 服务之间的调用很频繁并且有多种方式, 可以通过 JDK 原生的 URLConnection, Apache 的 Http Client, Netty 的异步 Http Client 或者 Spring 的 RestTemplate 去实现服务间的调用. 但最优雅、最方便的还是Spring Cloud 的 Open Feign.

Feign 是一种声明式、模板化的 HTTP 客户端. 在 Spring Cloud 中使用 Feign, 可以做到使用 HTTP 调用远程服务就像调用本地方法一样.

Feign 的一些特性

  1. 支持 Ribbon 的负载均衡
  2. 支持 Hystrix 和它的 Fallback
  3. 支持 HTTP 请求和响应的压缩

Feign 工作原理

  1. 主程序入口处添加 @EnableFeignClients 注解, 定义的接口处添加 @FeignClients 注解
  2. 程序启动后, 会扫描被 @FeignClients 注解的接口, 并将这些信息注入到 Spring IOC 容器中. 调用接口方法的时候, Feign 会为每一个接口方法创建一个 RestTemplate 对象. 该对象封装了HTTP 请求的所有信息
  3. 然后RestTemplate 生成 Request, 然后把 Request 交给 Client (JDK 原生的 URLConnection、Apache 的 httpclient 或者是 OK http) 处理
  4. 最后 Client 被封装到 LoadBalanceClient类, 这个类结合 Ribbon 负载均衡发起服务间的调用

Feign 配置参数

FeignClient 注解的属性

  • name/value: 指定了微服务的名称, 用户服务发现
  • url: 一般用于调试, 可以手动指定 @FeignClient 的调用地址 (如果同时指定 name 和 url 属性: 则以 url 属性为准, name 属性指定的值便当做客户端的名称)
  • configuration: Feign 配置类, 可以自定义 Feign 的 Encoder, Decoder, LogLevel, Contant
  • path: 定义当前 FeignClient 的统一前缀

对单个 FeignClient 进行配置

可以通过 application.properties 或者 application.yaml 类配置

代码语言:javascript
复制
feign:
  client:
    config:
      feignName: joke-resource
        connectTimeout: 5000                              # 连接超时时间
        readTimeout: 5000                                 # 读超时间
        loggerLevel: full                                 # 日志级别
        errorDecoder: com.example.SimpleErrorDecoder      # 错误解码器
        retryer: com.example.SimpleRetryer                 # 配置重试
        requestInterceptors:                              # 配置拦截器
        - com.example.FooRequestInterceptor
        - com.example.BarReqeustInterceptor
        decode404: false
        encoder: com.example.SimpleEncoder                # 编码器
        decoder: com.example.SimpleDecoder                # 解码器
        contract: com.example.SimpleContract              # Contract 配置

对所有的 FeignClient 进行配置(两种方式)

  1. 第一种方式是通过默认配置类来配置 @EnableFeignClients 注解有一个 defaultConfiguration 属性, 可以自定义一个 DefaultFeignConfiguration.java 类来配置 @SpringBootApplication @EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
  2. 第二种方式是通过配置文件来配置. 配置文件的优先级高于配置类, 也就是说, 配置文件的属性会覆盖配置类 feign: client: config: default: connectTimeout: 5000 # 连接超时时间 readTimeout: 5000 # 读超时间 loggerLevel: basic # 日志级别

FeignClient 开启日志

Feign 为每一个 FeignClient 都提供了一个 feign.Logger实例.有两种方式.

第一种是配置文件加上 java 代码, 分为两步:

  1. 在 application.yaml 或者 application.properties 中配置日志输出 logging: level: com.deepflow.clients.api.*: debug # feignClient 接口所在的路径
  2. 通过 java 代码的方式在程序入口的地方配置日志 Bean(也可以通过创建 @Configuration 注解的类配置日志 Bean) import feign.Logger; // Logger.Level 具体级别 // NONE: 不记录任何信息 // BASIC: 仅记录请求方法、URL以及响应的头信息 // HEADERS: 除了记录BASIC 信息外, 还记录请求和响应的头信息 // FULL: 记录所有请求与响应的明细, 包括头信息、请求体、元数据 @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; }

第二种方式, 纯配置方式

代码语言:javascript
复制
feign:
  client:
    config:
      default:
        loggerLevel: full                                 # 日志级别

logging:
  level:
    com.deepflow.clients.api.*: debug					  # feign 接口所在的路径

Feign 超时设置

Feign 的调用分为两层, 即 Ribbon 的调用和 Hystrix 的调用, 高版本的 Hystrix 是默认关闭的

Ribbon 的配置

代码语言:javascript
复制
ribbon.ReadTimeout: 120000
ribbon.ConnectTimeout: 30000

Hystrix 的配置

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 从服务之间调用方式说起…
  • Feign 工作原理
  • Feign 配置参数
    • FeignClient 注解的属性
      • 对单个 FeignClient 进行配置
        • 对所有的 FeignClient 进行配置(两种方式)
        • FeignClient 开启日志
          • 第一种是配置文件加上 java 代码, 分为两步:
            • 第二种方式, 纯配置方式
            • Feign 超时设置
              • Ribbon 的配置
                • Hystrix 的配置
                相关产品与服务
                日志服务
                日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档