目录

  • 第一章 OpenFeign介绍
  • 1.1、什么是OpenFeign
  • 1.2、为啥用OpenFeign
  • 1.3、Fegin与OpenFeign
  • 第二章 OpenFeign入门案例
  • 2.1、项目准备
  • 2.2、创建工程
  • 2.3、导入依赖
  • 2.4、编写配置
  • 2.5、主启动类
  • 2.6、编写实体
  • 2.7、编写接口
  • 2.8、调用接口
  • 2.9、最终测试
  • 第三章 OpenFeign超时控制
  • 3.1、超时控制介绍
  • 3.2、设置超时时间
  • 第四章 OpenFeign日志打印
  • 4.1、日志打印介绍
  • 4.2、日志打印级别
  • 4.3、开启日志打印
  • 4.3.1、编写配置对象
  • 4.3.2、编写配置属性
  • 4.4、测试日志打印



配套资料,免费下载
链接:https://pan.baidu.com/s/1la_3-HW-UvliDRJzfBcP_w
提取码:lxfx
复制这段内容后打开百度网盘手机App,操作更方便哦

第一章 OpenFeign介绍

1.1、什么是OpenFeign

OpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。

1.2、为啥用OpenFeign

OpenFeign可以用来简化HTTP的调用。

1.3、Fegin与OpenFeign

openfeign报错 Unsatisfied dependency expressed through constructor parameter openfeign调用_超时控制

第二章 OpenFeign入门案例

2.1、项目准备

我们接下来的所有操作均是在Ribbon最后完成的工程上进行操作,相关代码请到配套资料中寻找。

openfeign报错 Unsatisfied dependency expressed through constructor parameter openfeign调用_日志打印_02

2.2、创建工程

spring-cloud-study创建一个子项目名字叫:service-consumer9002

2.3、导入依赖

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </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>
        <version>1.18.16</version>
    </dependency>
</dependencies>

2.4、编写配置

application.yaml

server:
  port: 9002

spring:
  application:
    name: service-consumer9002

eureka:
  client:
    #是否将自己注册到注册中心,默认为 true
    register-with-eureka: false
    #表示 Eureka Client 间隔多久去服务器拉取注册信息,默认为 30 秒
    registry-fetch-interval-seconds: 10
    #设置服务注册中心地址
    service-url:
      defaultZone: http://root:123456@eureka-server7001.com:7001/eureka/,http://root:123456@eureka-server7002.com:7002/eureka/

2.5、主启动类

com.caochenlei.ServiceConsumer9002Application

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

2.6、编写实体

com.caochenlei.pojo.Product

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
    private Integer pid;
    private String name;
    private Double price;
    private Integer count;
}

2.7、编写接口

com.caochenlei.service.ProductFeignService

@Component
@FeignClient("SERVICE-PROVIDER")
public interface ProductFeignService {
    /**
     * 编写技巧,直接把服务提供者那一端的控制器方法的两行拷贝过来,最后加一个分号就可以了,别的什么也不用动
     */
    @RequestMapping("/provider/product/findAll")
    public List<Product> findAll();

    @RequestMapping("/provider/product/findByPid")
    public String findByPid(@RequestParam("pid") Integer pid);
}

2.8、调用接口

com.caochenlei.controller.ProductController

@RestController
public class ProductController {
    @Autowired
    private ProductFeignService productFeignService;

    @RequestMapping("/consumer/product/findAll")
    public List<Product> findAll() {
        return productFeignService.findAll();
    }

    @RequestMapping("/consumer/product/findByPid")
    public String findByPid(@RequestParam("pid") Integer pid) {
        return productFeignService.findByPid(pid);
    }
}

2.9、最终测试

(1)依次启动以下注册中心:

  1. eureka-server7001
  2. eureka-server7002

(2)依次启动以下服务提供者:

  1. service-provider8001
  2. service-provider8002

(3)依次启动以下服务消费者:

  1. service-consumer9002

(4)打开浏览器输入地址:http://localhost:9002/consumer/product/findAll

openfeign报错 Unsatisfied dependency expressed through constructor parameter openfeign调用_日志打印_03

(5)打开浏览器输入地址:http://localhost:9002/consumer/product/findByPid?pid=1

openfeign报错 Unsatisfied dependency expressed through constructor parameter openfeign调用_spring_04

第三章 OpenFeign超时控制

3.1、超时控制介绍

默认Feign客户端只等待一秒钟,如果服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错。

为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。

3.2、设置超时时间

打开application.yaml,添加如下配置:

ribbon:
  ReadTimeout:  5000
  ConnectTimeout: 5000

第四章 OpenFeign日志打印

4.1、日志打印介绍

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

简单来说,就是对Feign接口的调用情况进行监控和输出。

4.2、日志打印级别

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

4.3、开启日志打印

4.3.1、编写配置对象

com.caochenlei.config.FeignConfig

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

4.3.2、编写配置属性

application.yaml

logging:
  level:
    com.caochenlei.service: debug

4.4、测试日志打印

重启service-consumer9002,然后使用浏览器访问地址:http://localhost:9002/consumer/product/findByPid?pid=1

openfeign报错 Unsatisfied dependency expressed through constructor parameter openfeign调用_日志打印_05