zoukankan      html  css  js  c++  java
  • springcloud-Feign配置一

    一 前言

    前文我们使用过了使用restTemplate结合Ribbon实现了HTTP远程过程调用消费服务,由于使用直接使用RestTenplate进行服务调用不是很理想,所以我们选择更好方式使用Feign进行Web Service 调用;之前文章的学习jdk版本都是基于javaSE8.0,Feign也是如此,不支持8.0以下,如果是初学者,请看知识追寻者cloud系列文章从头开始看,否则会一头雾水;

    本篇文章的Feign只是入门级别,主要讲解feign的工作流程,基本TTTP远程调用,相关基本配置等,后续会出主流高级配置;

    二 Feign 简介

    Feign的由来是基于retrofitjax-rsJSR 356, Java API for WebSocket;其内部对RestTemplate进行了封装,在使用过程中简化了HTTP远程过程调用过程,使开发人员使用更加简便;

    Feign特色如下:

    1. 响应缓存支持,可多中类型选择;支持扩展的缓存,如EhCache, Google, Spring;
    2. 完整的URI 模板表达式语言支持;
    3. 类SLF4J 日志支持;

    三 Feign的工作流

    @EnableFeignClients 表示开启Feign功能,然后扫描 注解@FeignClient,程序启动后,会将这些类扫描进IOC容器;Feign会 对 RestTemplate 进行 封装,简化HTTP远程过程调用;RestTemplate使用Request 模板生成新的Requst 发送请求,其底层通常是基于URLConnection;

    在这里插入图片描述

    四 Eureka-Client

    在之前的Eureka-Clinet 工程的表现层包创建新的controller层API用于服务提供;

    /**
     * @Author lsc
     * <p> 知识追寻者 Feign 服务消费</p>
     */
    @RestController
    public class FeignProvoderController {
    
        @GetMapping("zszxz/feign")
        public String getFeign(){
            return "the get method of feign test";
        }
    }
    

    五 Feign-client

    在父工程中创建新的 子工程 Feign-client;

    5.1 pom.xml

    添加openfeign 依赖;

    	<dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
        </dependencies>
    

    5.2 application.yml

    这边我们使用新的端口8093,应用名称是 feign-client; 同样将服务注入peer1,peer2,peer3;并且设置feign的客户端属性,比如连接时间,读取时间,日志级别;

    server:
      port: 8093
    
    spring:
      application:
        name: feign-client # 应用名称
    
    eureka:
      client:
        service-url:
          # 服务注册地址
          defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
    
    feign:
      client:
        config:
          default:
            connectTimeout: 5000 # 连接超时时间
            readTimeout: 5000   # 读超时时间
            loggerLevel: full # 日志级别
    

    5.3 service

    在service 接口 上标明注解 @FeignClient表示 是 一个Feign的客户端类; 属性 name 表示 Feign客户端名称;value表示服务提供者的应用名称;由于 eureka-client 中 提供了表现层API,我们 在service接口中定义相应的方法并且使用@GetMapping注解,里面配上需要调用的path,表示我们具体要消费的服务;

    /**
     * @Author lsc
     * <p> </p>
     */
    @FeignClient( name = "eureka-client", value = "eureka-client")
    public interface FeignService {
    
        @GetMapping("zszxz/feign")
        public String getFeign();
    
    }
    
    

    5.4 controller

    controller层也就是平常的表现层,没什么特别之处,直接调用service接口提供的API;

    /**
     * @Author lsc
     * <p> feign 表现层 </p>
     */
    @RestController
    public class FeignController {
    
        @Autowired
        FeignService feignService;
    
        @GetMapping("zszxz/feign")
        public String getFeign(){
            // 调用 getFeign方法
            return feignService.getFeign();
        }
    }
    

    5.5 启动类

    在启动类上方标明@EnableFeignClients,其表示启用feign功能,扫描@FeignClient 标明的类入IOC容器;

    /**
     * @Author lsc
     * <p> feign启动类</p>
     */
    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients//表示启用feign
    public class FeignApp {
    
        public static void main(String[] args) {
            SpringApplication.run(FeignApp.class,args);
        }
    
    }
    

    六 调用结果

    6.1 工程结构如下

    在这里插入图片描述

    6.2 结果

    启动工程,访问地址 http://localhost:8093/zszxz/feign ; 结果如下如,表示使用Feign调用HTTP服务消费成功;

    在这里插入图片描述

    七 @FeignClient注解说明

    当 IOC容器中有相同的实例,@Autowired 会不起作用,此时会报错,使用@Primary 标明哪一个实例是首要实例,会优先被IOC扫描注入;

    属性 说明
    name Feign Client的名称 支持占位符${}
    serviceId 服务id
    value 指定 serviceId
    url 指定调用的URl, 支持占位符${}
    decode404 404错误时,设置为true,会进行decode解码,否则FeignException
    fallback 容错处理
    fallbackFactory 生成fallback模板示例,减少重复代码
    path Path统一前缀
    primary 设置为 primary Bean
    qualifier 为Feign Client 新增注解@Qualifier

    八 日志设置

    每个 Feign client 都会创建日志,默认是接口的全类名作为日志名称,日志响应仅支持debug模式;日志的配置方式有两步骤,一是通过配置文件,二是通过JAVA注解配置类;

    日志级别 说明
    NONE 没有日志(默认)
    BASIC 请求和响应的状态码,时间
    HEADERS 基于Basic加上请求和响应头
    FULL 请求和响应的 head ,body 和元数据

    8.1 application.yml

    在 application.yml 中添加如下配置

    logging:
      level:
        com.zszxz.feign.service: Debug
    

    8.2 config

    配置类如下

    /**
     * @Author lsc
     * <p> </p>
     */
    @Configuration
    public class FeignConfiguration {
    
        @Bean
        Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL;
        }
    }
    

    8.3 指定Config

    在 @FeignClien 中可以指定具体使用Feign的配置类,此时会覆盖feign的默认配置;

    @FeignClient( name = "eureka-client", value = "eureka-client",configuration = FeignConfiguration.class)
    
    

    九参考文档

    https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html

    在这里插入图片描述

  • 相关阅读:
    类定义(课下选做)
    结对项目第一周
    迭代和JDB
    JAVA 第五周学习总结
    JAVA 第四周学习总结
    JAVA 第三周学习总结
    springcloud-provider-consumer-register
    springcloud-eureka
    springBoot-打包
    spring-Scheduler
  • 原文地址:https://www.cnblogs.com/zszxz/p/12111523.html
Copyright © 2011-2022 走看看