zoukankan      html  css  js  c++  java
  • Spring Cloud Feign服务之间的调用

    转自:https://cloud.tencent.com/developer/article/1701342

    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 类配置

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

    第二种方式, 纯配置方式

    feign:
      client:
        config:
          default:
            loggerLevel: full                                 # 日志级别
    
    logging:
      level:
        com.deepflow.clients.api.*: debug					  # feign 接口所在的路径

    Feign 超时设置

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

    Ribbon 的配置

    ribbon.ReadTimeout: 120000
    ribbon.ConnectTimeout: 30000
  • 相关阅读:
    2017区块链七大趋势,概念热炒之后行业如何发展?
    区块链三大方向:比特币,其他公有链和区块链联盟,以及私有链。
    这条消息被许多人忽视,但对房价可能“一剑封喉”!
    世界主要城市名称中英文对照
    2016全球城市竞争力排行榜
    全球城市群Megalopolis
    gawc全球城市
    2016全球资产配置白皮书(附下载)
    160. Intersection of Two Linked Lists
    save change is not permitted
  • 原文地址:https://www.cnblogs.com/ScarecrowAnBird/p/14075880.html
Copyright © 2011-2022 走看看