精华内容
下载资源
问答
  • openFeign

    2021-02-07 15:18:37
    Feign和OpenFeign的区别 openFeign的使用 1.导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> &...

    Feign是什么
    在这里插入图片描述
    在这里插入图片描述
    Feign和OpenFeign的区别
    在这里插入图片描述
    openFeign的使用
    1.导入依赖

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

    因为openFeign的依赖里面含有Ribbon的依赖,所以可以不导入Ribbon的坐标而进行负载均衡。

    2.yml配置文件

    主要配置的是eureka

    server:
      port: 80
    
    eureka:
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
    #设置feign客户端超时时间(OpenFeign默认支持ribbon)
    ribbon:
    #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
    #指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000
    
    logging:
      level:
        # feign日志以什么级别监控哪个接口
        com.atguigu.springcloud.service.PaymentFeignService: debug
    

    3.主启动类上加注解

    @EnableFeignClients

    4.创建服务接口

    服务提供方接口

    @GetMapping(value = "/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)
        {
            Payment payment = paymentService.getPaymentById(id);
    
            if(payment != null)
            {
                return new CommonResult(200,"查询成功,serverPort:  "+serverPort,payment);
            }else{
                return new CommonResult(444,"没有对应记录,查询ID: "+id,null);
            }
        }
    

    服务消费方接口

    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")//服务提供方名称
    public interface PaymentFeignService
    {
        @GetMapping(value = "/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
    

    5.消费方在Controller中进行调用

    
        @Resource
        private PaymentFeignService paymentFeignService;
    
        @GetMapping(value = "/consumer/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)
        {
            return paymentFeignService.getPaymentById(id);
        }
    

    openFeign默认自动配置了负载均衡且默认采用轮询策略

    2.openFeign的超时控制

    首先让我们来看看超时指的是什么?

    服务提供方的接口,特意进行3秒睡眠处理

    @GetMapping(value = "/payment/feign/timeout")
        public String paymentFeignTimeout()
        {
            // 业务逻辑处理正确,但是需要耗费3秒钟
            try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
            return serverPort;
        }
    

    消费端调用服务端接口

    @GetMapping(value = "/consumer/payment/feign/timeout")
        public String paymentFeignTimeout()
        {
            // OpenFeign客户端一般默认等待1秒钟
            return paymentFeignService.paymentFeignTimeout();
        }
    

    我们请求消费端的接口看看结果
    在这里插入图片描述
    我们发现显示超时,原因是我们使用openFeign调用服务提供者的接口时默认的超时时间为1秒,而我们在服务提供端让他沉睡了3秒,所以显示超时

    配置openFeign超时时间

    ribbon:
    #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
    #指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000
    

    4.openFeign的日志增强

    配置文件中配置

    logging:
      level:
        # feign日志以什么级别监控哪个接口
        com.atguigu.springcloud.service.PaymentFeignService: debug
    

    创建配置类

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

    此时调用会打印详细信息

    在这里插入图片描述

    展开全文
  • OpenFeign

    2021-01-15 10:41:46
    OpenFeign 概述 OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的**@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理方式山生实现类...

    OpenFeign

    概述

    OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的**@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理方式山生实现类,实现类中做负载均衡**并调用其它服务。

    Fegin

    Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务,Feign的使用方法是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。现在Fegin已停用。

    openFeign的依赖

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

    OpenFeign的服务调用

    概述

    以前我们的服务消费者使用Ribbon+RestTemplate进行服务调用,现在我们使用OpenFeign来进行调用,一个接口+一个注解(@FeignClient)的方式。

    yml文件

    server:
      port: 8020
    spring:
      application:
        name: eureka-feign
    eureka:
      client:
        # 表示将自己注册进EurekaServer,默认为true
        register-with-eureka: false
        # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
        fetch-registry: true
        service-url:
          # 集群注册
          defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
    
    • 主启动类(添加@EnableFeignClients注解)
      在这里插入图片描述

    • service业务层接口添加FeignClient注解
      在这里插入图片描述
      注意还要加上@Component注解

    属性:

    • name:对象名
    • url:对象的地址

    OpenFeign的超时控制

    OpenFeign默认等待1秒钟,超过后报错。

    设置OpenFeign的超时等待

    因为具体发送请求包含负载均衡都是由底层的Ribbon实现的,所以我们实际上是要配置Ribbon的超时设置。

    yml配置

    server:
      port: 8020
    spring:
      application:
        name: eureka-feign
    eureka:
      client:
        # 表示将自己注册进EurekaServer,默认为true
        register-with-eureka: false
        # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
        fetch-registry: true
        service-url:
          # 集群注册
          defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
    # 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
    ribbon:
      # 读取超时时间,建立连接后服务器取到可用资源所用的时间
      ReadTimeout: 5000
      # 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
      ConnectTimeout: 5000
    

    OpenFeign日志增强

    OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。

    日志级别

    OpenFeign有一下几个日志级别

    1. NONE:默认的,不显示任何日志。
    2. BASIC:仅记录请求方法,URL,响应状态码及执行时间。
    3. HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息。
    4. FULL:除了HEADERS中定义的信息之外,还有请求和响应正文元数据。

    日志配置

    OpenFeign的日志需要专门有个日志Bean来定义

    在@Configuration的类中配置

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

    Logger是OpenFeign的Logger类,不要用错了(import feign.Logger;)

    在application.yml中配置每个业务类的日志监控级别。

    server:
      port: 8020
    spring:
      application:
        name: eureka-feign
    eureka:
      client:
        # 表示将自己注册进EurekaServer,默认为true
        register-with-eureka: false
        # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true
        fetch-registry: true
        service-url:
          # 集群注册
          defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
    # 设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)
    ribbon:
      # 读取超时时间,建立连接后服务器取到可用资源所用的时间
      ReadTimeout: 5000
      # 连接所用的时间,适用于网络正常情况下,两端连接所用的时间
      ConnectTimeout: 5000
    logging:
      level:
        # feign日志已什么级别监控哪一个接口
        文件夹名称.接口名名称: debug
    
    展开全文
  • openfeign

    2021-03-29 10:50:10
    OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“feign 接口 + 注解”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate。 maven <dependency> <...

    说明

    OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“feign
    接口 + 注解”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate。

    maven

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

    接口注解

    @FeignClient("liqy-provider-depart")
    // 参数为要调用的提供者相应的uri
    @RequestMapping("/liqy")
    public interface DepartService {
        @PostMapping("/save")
        boolean saveDepart(@RequestBody Data data);
    }
    

    启动类注解

    @EnableFeignClients // 启用所有Feign客户端

    超时设置

    feign:
    client:
    config:
    default:
    # 连接超时
    connectTimeout: 5000 # 单位:毫秒
    # 读超时
    readTimeout: 5000 # 单位:毫秒

    展开全文
  • OPenFeign

    2020-10-03 22:51:35
    OPenFeign Feign是一个声明式的WebService客户端, 使用Feign能让编写Web Service客户端更加简单 它使用的方法是定义个服务接口然后在上面添加注解,Feign也支持可插拔式的编码器和解码器,SpringCloud对feign进行了...

    OPenFeign

    Feign是一个声明式的WebService客户端, 使用Feign能让编写Web Service客户端更加简单

    它使用的方法是定义个服务接口然后在上面添加注解,Feign也支持可插拔式的编码器和解码器,SpringCloud对feign进行了封装支持SpringMVC中标准注解和httpMessageConverteres。Feign还可以与EUREKA和Ribbon组合使用支持负载均衡

    能干嘛

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSbZR5YH-1601736701617)(C:\Users\74551\AppData\Roaming\Typora\typora-user-images\image-20200818161424095.png)]

    Feign 和 OPenFeign的区别

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qf3WCKZt-1601736701622)(C:\Users\74551\AppData\Roaming\Typora\typora-user-images\image-20200818162227529.png)]

    使用步骤(总的来说: 微服务调用接口+@FeignClient)

    自带负载均衡的配置项

    1.建Model cloud-consumer-feign-order80 消费端使用

    2.写pom

    
        <dependencies>
            <!--openfeign-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <!--eureka client-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>com.atguigu.springcloud</groupId>
                <artifactId>cloud-api-common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--监控-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--热部署-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    3.改yml

    server:
      port: 80 # 模拟不用加端口
    spring:
      application:
        name: cloud-order-service
    
    
    eureka:
      client:  # false 表示不向注册中心注册自己
        register-with-eureka: true   # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要检索服务
        fetch-registry: true
        service-url:
          # 设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
          # defaultZone: http://localhost:7001/eureka/  单机版
          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
    
    # 设置feign客户端超时时间(OpenFeign默认支持ribbon)
    ribbon:
      # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
      # 指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000
    logging:
      level:
        # feign 日志以及什么级别监控哪个接口
       com.atguigu.springcloud.service.PaymentFeignService: debug
    
    

    4.改启动类

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

    5.业务类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0W9GNKf-1601736701623)(C:\Users\74551\AppData\Roaming\Typora\typora-user-images\image-20200818170826105.png)]

    调用其他提供服务的模块

    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
    public interface PaymentFeignService {
    
        @GetMapping(value="/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
    
        @GetMapping("/payment/feign/timeout")
        public String paymentFeignTimeout();
    
    }
    
    

    6.控制层

    @RestController
    @Slf4j
    public class OrderFeignController {
    
        @Resource
        private PaymentFeignService paymentFeignService;
    
        @GetMapping(value = "/consumer/payment/get/{id}")
        public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
            return paymentFeignService.getPaymentById(id);
        }
        @GetMapping("/consumer/payment/feign/timeout")
        public String paymentFeignTimeout() {
            //openfeign-ribbon 客户端默认等待1s
            return paymentFeignService.paymentFeignTimeout();
        }
    
    }
    

    小总结

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XF7tVcuK-1601736701626)(C:\Users\74551\AppData\Roaming\Typora\typora-user-images\image-20200818171040614.png)]

    超时设置 OPenFeign 默认等待1秒钟 超过后会报错

    # 设置feign客户端超时时间(OpenFeign默认支持ribbon)
    ribbon:
      # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
      # 指的是建立连接后从服务器读取到可用资源所用的时间
      ConnectTimeout: 5000
    

    日志打印功能

    1.配置Bean

    @Configuration
    public class FeignConfig {
    
        /**
         * feignClient配置日志级别
         *
         * @return
         */
        @Bean
        public Logger.Level feignLoggerLevel() {
            // 请求和响应的头信息,请求和响应的正文及元数据
            return Logger.Level.FULL;
        }
    }
    

    2.yml增加配置

    logging:
      level:
        # feign日志以什么级别监控哪个接口
        com.atguigu.springcloud.service.PaymentFeignService: debug
     
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,791
精华内容 2,716
热门标签
关键字:

openfeign