zoukankan      html  css  js  c++  java
  • 三、springcloud之服务调用Feign

    一、背景

     项目中接口调用:

    • Httpclient
    • Okhttp
    • Httpurlconnection
    • RestTemplate

    微服务提供了更简单,方便的Feign

    二、Feign简介

    • Feign是一个声明式的REST客户端,它的目的就是让REST调用更加简单。
    • Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
    • 而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。
    • SpringCloud对Feign进行了封装,使其支持SpringMVC标准注解和HttpMessageConverters。
    • Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

    三、使用

    1.准备:  

      1.gradle:

    compile('org.springframework.cloud:spring-cloud-starter-feign')

      2.在应用主类中通过@EnableFeignClients注解开启Feign功能,具体如下: 

      @EnableFeignClients可以指定扫描的包。如@EnableFeignClients(com.test)

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

    2.绑定服务

         1.服务提供方提供接口

      2.消费方继承接口,添加注解

    @FeignClient(name = "微服务之间调用直接在name处输入服务名,其他rest需要指定url", url = "${yml配置文件url地址}", fallback = HystrixLawsFallback.class, configuration = MyFeignConfig.class)
    public interface ServiceClient {
    
        @RequestMapping(method = RequestMethod.GET, value = "/client/{id}")
        ClientVo getClient(@RequestParam("id") String id);
    }

      

    @FeignClient

      name/value:微服务之间调用直接在name处输入服务名,其他rest需要指定url,若是没有其他可以省略

          原有serviceId已废弃

      url:指定访问路径RequestMapping表明相对路径

      fallback:Feign熔断器回调

      configuration:可以让你自定义配置信息来覆盖Feign的默认配置

      value:表示你要消费哪个服务的接口

      path:就是统一的前缀

      该注解表示申明创建一个rest client bean,可以直接通过Autowired注入使用,如果ribbon在工程中启用,则会使用load balance进行后端请求调用,可以为FeignClient指定value表明需要访问的serviceId

    说明:

      fallback = HystrixServiceFallback.class为熔断返回处理

    @Component
    public class HystrixServiceFallback implements Client {
    
        @Override
        public ClientVo getClient(String id) {  
            ClientVo client = new FClientVo();
            client.setName(false);
            return client;
        }
        
    }

      configuration = MyFeignConfig.class配置日志输出

    @Configuration
    public class MyFeignConfig {
        @Bean
        Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL;
        }
    }

    level级别:

    NONE:不记录任何信息

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

    HEADERS:BASIC信息加上请求和响应的头信息

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

    3.调用

      controller直接注入使用:

      @Autowired
        private ServiceClient serviceClient;
        
        @GetMapping("{id}")
        public ClientVo getClient(@PathVariable String id) throws Exception {
            ClientVo client = serviceClient.getClient(id);
            return client;
        }

    Feign的源码实现的过程:

    首先通过@EnableFeignCleints注解开启FeignCleint
    根据Feign的规则实现接口,并加@FeignCleint注解
    程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
    当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
    RequesTemplate在生成Request
    Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
    最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。
  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/soul-wonder/p/9200608.html
Copyright © 2011-2022 走看看