Spring Cloud 系列之服务调用 OpenFeign的实现

1.1 简介

1.1.1 概述

  Feign 旨在使编写 Java Http 客户端变得更容易。在使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 http 请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign 在 Ribbon 基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在 Feign 的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用 Spring cloud Ribbon 时,自动封装服务调用客户端的开发量。与 Ribbon 不同的是,通过 Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
  Feign 已经停止维护,OpenFeign 是 Spring Cloud 在 Feign 的基础上进一步开发出来替代 Feign 的技术,支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

1.1.2 相关依赖

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1.2 简单使用

1.2.1 基础工程

eureka 项目

1.2.2 Feign 客户端

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/11/5
 * @description Feign 接口
 */
@Component
@FeignClient("ProviderServer")	// 服务提者名称
public interface ProviderFeign {

 @GetMapping("/provider/get")	// 服务地址
 public String get();
}

1.2.3 启动类

@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
 public static void main(String[] args) {
 SpringApplication.run(ConsumerApplication.class, args);
 }
}

1.2.4 调用服务

  我们可以发现 Feign 自带负载均衡配置,而 OpenFeign 默认支持 Ribbon,我们可以通过 Ribbon 的配置来修改负载均衡策略。Ribbon 详情参考 ☞Spring Cloud 系列之负载均衡 Ribbon

1.3 其他配置

 1.3.1 超时控制

# 设置 feign 客户端超时时间, 默认 1s
feign:
 client:
 config:
 default:
 connectTimeout: 5000
 readTimeout: 5000

# OpenFeign 默认支持 Ribbon,也可以使用以下配置
ribbon:
 # 建立连接所用时间,适用于网络正常的情况下,两端连接所用的时间
 ConnectTimeout: 5000
 # 建立连接后从服务器读取到可用资源所用的时间
 ReadTimeout: 5000

1.3.2 数据压缩

feign:
 compression:
 request:
 # 开启数据压缩请求
 enabled: true
 # 压缩数据类型
 mime-types: text/xml, application/xml, application/json
 # 数据压缩下限 2048表示传输数据大于2048 才会进行数据压缩(最小压缩值标准)
 min-request-size: 2048
 # 开启数据压缩响应
 response:
 enabled: true

1.3.3 日志配置

☞ 日志级别

 ♞ NONE:不开启日志(默认)
 ♞ BASIC:记录请求方法、URL、响应状态、执行时间
 ♞ HEADERS:在 BASIC 基础上增加请求/响应头
 ♞ FULL:在 HEADERS 基础上增加 body 和请求元数据

☞ 配置类

@Configuration
public class LogConfig {
 @Bean
 Logger.Level loggerLevel(){
 return Logger.Level.FULL;
 }
}

☞ 配置文件

logging:
 level:
 # 以什么级别监控那个接口
 com.software.controller: debug

☞ 输出



☞ 源码

到此这篇关于Spring Cloud 系列之服务调用 OpenFeign的实现的文章就介绍到这了,更多相关Spring Cloud服务调用 OpenFeign内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud Feign转发请求头(防止session失效)的解决方案

    微服务开发中经常有这样的需求,公司自定义了通用的请求头,需要在微服务的调用链中转发,比如在请求头中加入了token,或者某个自定义的信息uniqueId,总之就是自定义的一个键值对的东东,A服务调用B服务,B服务调用C服务,这样通用的东西如何让他在一个调用链中不断地传递下去呢?以A服务为例: 方案1 最傻的办法,在程序中获取,调用B的时候再转发,怎么获取在Controller中国通过注解获取,或者通过request对象获取,这个不难,在请求B服务的时候,通过注解将值放进去即可:简代码如下: 获取

  • 如何基于springcloud模拟RPC调用(Feign)

    Feign简介 Feign是一个声明式的Web Service客户端,它能够让Web Service客户端的编写变得更加容易(你只需创建一个接口,并在接口上添加相应注解即可).除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在使用Feign时能够为其提供一个负载均

  • Java 如何使用Feign发送HTTP请求

    在往常的 HTTP 调用中,一直都是使用的官方提供的 RestTemplate 来进行远程调用,该调用方式将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Feign 后,考虑使其作为一个 HTTP 发送基础,来进行远程调用. 下面就让我们来看一下,其是如何使用的. 引入依赖 首先,我们需要将 Feign 的基础依赖引入项目,因为我们只使用 Feign 的 remote 功能,因此,只引入基础依赖. 此外在项目中,我们还自定义了了 JSON 转换和 log 设置,因此还需要引入这些的第三方

  • springboot FeignClient注解及参数

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name = "github-client", url = "https://api.github.com", configuration = GitHubExampleConfig.class) public interface GitHubClient { @Request

  • Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    基于 spring-boot-starter-parent 2.1.9.RELEASE, spring-cloud-openfeign 2.1.3.RELEASE 引子 Feign 是一个声明式.模板化的HTTP客户端,简化了系统发起Http请求.创建它时,只需要创建一个接口,然后加上FeignClient注解,使用它时,就像调用本地方法一样,作为开发者的我们完全感知不到这是在调用远程的方法,也感知不到背后发起了HTTP请求: /** * @author axin * @suammry xx 客

  • 解决Spring Cloud Feign 请求时附带请求头的问题

    问题描述 Feign 在请求时是不会将 request 的请求头带着请求的,导致假如 Feign 调用的接口需要请求头的信息,比如当前用户的 token 之类的就获取不到 解决方案 FeignConfiguration 通过实现 Feign 的 RequestInterceptor 将从上下文中获取到的请求头信息循环设置到 Feign 请求头中. /** * feign 配置文件 * 将请求头中的参数,全部作为 feign 请求头参数传递 * @author: linjinp * @create

  • SpringCloud Feign服务调用请求方式总结

    前言 最近做微服务架构的项目,在用feign来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录.以下通过分为三种情况说明,无参数,单参数,多参数.每种情况再分get和post两种请求方式进行说明.这样的话,6种情况涵盖了feign调用的所有情况. 有个建议就是为了保证不必要的麻烦,在写feign接口的时候,与我们的映射方法保持绝对一致,同时请求方式,请求参数注解也都不偷懒的写上.如果遵循这种规范,可以避开90%的调

  • Java探索之Feign入门使用详解

    一,简介 Feign使得 Java HTTP 客户端编写更方便.Feign 灵感来源于Retrofit.JAXRS-2.0和WebSocket.Feign最初是为了降低统一绑定Denominator到HTTP API的复杂度,不区分是否支持Restful.Feign旨在通过最少的资源和代码来实现和HTTP API的连接.通过可定制的解码器和错误处理,可以编写任意的HTTP API. Maven依赖: <!-- https://mvnrepository.com/artifact/com.netf

  • Spring Cloud Feign组成配置过程解析

    Feign的组成 接口 作用 默认值 Feign.Builder Feign的入口 Feign.Builder Client Feign底层用什么去请求 和Ribbon配合时:LoadBalancerFeignClient 不和Ribbon配合时:Fgien.Client.Default Contract 契约,注解支持 SpringMVCContract Encoder 解码器,用于将独享转换成HTTP请求消息体 SpringEncoder Decoder 编码器,将相应消息体转成对象 Res

  • java使用Feign实现声明式Restful风格调用

    一.Feign简介 Feign是netflix开发的声明式.模板化的http客户端,在使用时就像调用本地(服务消费者自己)的方法一般,帮助我们更加优雅的调用服务提供者的API.Feign自身支持springMVC,还整合了Eureka.Ribbon,极大的简化了Feign的使用.就整合Euraka而言,只需和普通的服务配置Eureka server的信息即可.整合Ribbon,就意味着不再需要通过标注@LoadBalanced的实例化后的RestTemplate去调用服务提供者方法了.Feign

  • 解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

    LocalDate . LocalTime . LocalDateTime 是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作.然而,我们在使用Spring Boot或使用Spring Cloud Feign的时候,往往会发现使用请求参数或返回结果中有 LocalDate . LocalTime . LocalDateTime 的时候会发生各种问题.本文我们就来说说这种情况下出现的问题,以及如何解决. 问题现象 先来看看症状.比如下面的例子: @Sprin

随机推荐