SpringCloud 整个Feign/OpenFeign微服务间调用

一、OpenFeign

  简介:OpenFeign是一种声明式、模板化的HTTP客户端,内部封装了RestTemplate(RestTemplate单独用作系统之间通信时代码耦合性还是很高),使用OpenFeign就如同调用本地方法一样简单的访问远程服务。

  1. Feign了解

    A. Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样,你不用再自己拼接url,拼接参数等操作,一切都交给Feign去做;

    B. Feign支持对请求和响应进行gzip压缩,以减少通讯过程中的性能省耗,注意也需要打开server.compression.enabled=true;

    C. Feign中已经自动集成了Ribbon依赖和自动配置,默认设置了请求超时时间和重试机制,超时会报错;

    D. Feign中默认也对Hystrix有集成,只不过是关闭状态,当请求超时、资源不足时进行服务降级处理,不调用真实服务逻辑,而是使用快速失败(fallback)方式直接返回托底数据,保证服务链条完整,避免服务雪崩;

    E. 可以自定义配置HttpClient、OkHttpClient作为Feign的客户端。

  2. OpenFeign与Feign对比

    A. Feign:是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,内置Ribbon作为客户端负载均衡,去调用服务注册中心的服务;

    B. OpenFeign:是Spring Cloud组件在Feign基础上支持了Spring MVC的注解(@RequestMapping等),通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

  3. pom.xml Maven依赖

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- Feign连接池 -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
        <!-- Feign文件 -->
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form-spring</artifactId>
            <version>3.8.0</version>
        </dependency>

  4. application.yml 文件配置

feign:
    compression:
        request:
            # 开启请求压缩
            enabled: true
        response:
            # 开启相应压缩
            enabled: true
    hystrix:
     # 开启熔断 enabled:
true
   httpclient:
     # 开启连接池
     enabled: true

  5. 注解

    A. @EnableFeignClients:开启Feign的支持,扫描对应的Feign Client;

    B. @FeignClient:声明Feign客户端可以访问远程服务,其中value值代表服务名称,用在接口上,Feign通过动态代理生成实现类。

  6. 日志级别

package com.rhxy.client.config;

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

import feign.Logger;

@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

}

    A. NONE:不记录任何日志信息,这是默认值;

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

    C. HEADERS:在BASIC基础上,额外记录了请求和响应的头信息;

    D. FULL:记录所有请求和响应的明细,包括头信息,请求体,元数据。

  7. 定义Feign

    A. Feign接口编写要求

      编写接口方法一般与被调用的微服务方法名保持一致,同时注意方法中的参数类型与参数个数一定要和被调用的微服务方法中的参数类型和个数保持一致;

      若被调用的微服务方法中使用了SpringMVC注解(@PathVariable),那么在Feign接口方法中也一定要加上相同注解,且方法的返回值要保持一致; 

    B. 

 

可参考:openFeign启动错误

posted @ 2020-09-06 10:56  如幻行云  阅读(368)  评论(0编辑  收藏  举报