SpringCloud——OpenFeign详解

2年前 (2022) 程序员胖胖胖虎阿
320 0 0

目录

 

一、OpenFeign介绍

1、概念

2、作用

3、架构图

二、OpenFeign案例

         1、案例说明

2、搭建Eureka服务端

(1)创建maven工程

(2)导入依赖

(3)配置application.yml

(4)创建主启动类

(5)启动Eureka注册中心

 3、搭建服务提供者Provider80

(1)创建maven工程

(2)导入依赖

(3)配置application.yml

(4)创建启动类

(5)创建controller

  4、搭建服务提供者Provider81(复制80端口)

(1)点击下方service

(2)复制端口

 (3)测试服务Provider81

​  5、搭建服务消费者Consumer83(重点)

(1)创建maven工程

 (2)导入依赖

(3)配置application.yml

(4)创建主启动类

(5)创建远程调用服务接口

(6)创建controller

6、测试案例

三、OpenFeign超时控制

1、超时控制概念

2、模拟超时报错

(1)服务提供方Provider80写超时方法(controller)

(2)服务消费者Consumer83添加远程调用方法(Service)

(4)测试

3、Feign通过配置文件可以控制超时时间

(1)配置服务消费者Consumner83的application.yml

(2)测试


 

一、OpenFeign介绍

1、概念

Feign是一个声明式web服务客户端,只需要创建一个接口并添加注解,即可实现远程调用服务。

2、作用

 ①服务消费者在远程调用时,只需通过编写一个接口,并表上注解进行配置,即可实现对服务提供方接口的绑定。

②Feign集成Ribbon,Feign利用Ribbon维护服务提供方列表,实现轮询调用服务提供者。

3、架构图

SpringCloud——OpenFeign详解 

二、OpenFeign案例

1、案例说明

一个Eureka注册中心,两个服务提供者Provider80、Provider81,实现同一功能,一个服务消费者Consumer82,如下图:

SpringCloud——OpenFeign详解 

2、搭建Eureka服务端

(1)创建maven工程

SpringCloud——OpenFeign详解

 (2)导入依赖

导入Eureka服务端、web模块依赖

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

(3)配置application.yml

①服务端口为7001;

②Eureka服务端主机名;

③Eureka客户端:

register-with-eureka:是否在服务中心注册

fetchRegistry:是否可以在注册中心被发现

service-url:服务中心url地址

server:
  port: 7001

eureka:
  instance:
    hostname: localhost

  client:
    register-with-eureka: false
    fetchRegistry: false
    service-url:
      defaultZone: http://localhost:7001/eureka

(4)创建主启动类

@EnableEurekaServer:Eureka服务端注解

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

(5)启动Eureka注册中心

访问http://localhost:7001

SpringCloud——OpenFeign详解

 3、搭建服务提供者Provider80

(1)创建maven工程

SpringCloud——OpenFeign详解

 

(2)导入依赖

导入Eureka客户端、web模块、监控依赖

 <dependencies>
        <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>
 </dependencies>

 (3)配置application.yml

①配置服务端口号为80;

②配置服务应用名称;

③配置Eureka注册中心,开启注册,指明注册中心地址。

server:
  port: 80

spring:
  application:
    name: provider

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

(4)创建启动类

@EnableEurekaClient:指明该服务为Eureka客户端

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

(5)创建controller

@RestController
public class FeignController {
    @Value("${server.port}")
    private String port;

    @GetMapping("/provider")
    public String hello(){
        return "访问端口号为:"+port;
    }
}

  4、搭建服务提供者Provider81(复制80端口)

由于Provider81服务和Provider8005服务内容一样,我们可以直接通过复制端口启动80服务,这就是上方controller为什么返回端口号原因,具体步骤如下:

(1)点击下方service

SpringCloud——OpenFeign详解

 

若下方没有service,可以到View打开,如下图:

SpringCloud——OpenFeign详解

SpringCloud——OpenFeign详解 SpringCloud——OpenFeign详解

(2)复制端口

-Dserver.port指明复制后的端口号

 SpringCloud——OpenFeign详解

 SpringCloud——OpenFeign详解

 (3)测试服务Provider81

访问http://localhost:81/provider

SpringCloud——OpenFeign详解  5、搭建服务消费者Consumer83(重点)

(1)创建maven工程

SpringCloud——OpenFeign详解

 (2)导入依赖

引入OpenFeign、Eureka、web,服务监控依赖

<dependencies>
        <!--openfeign-->
        <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>
</dependencies>

(3)配置application.yml

①配置服务·端口号为83;

②配置服务名称为:Consumer83;

③配置Eureka客户端,开启注册。配置注册中心地址。

server:
  port: 83
spring:
  application:
    name: consumer83
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

(4)创建主启动类

开启Eureka客户端,远程条用Feign客户端

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

(5)创建远程调用服务接口

①@FeignClient注解,指定远程调用的服务名称,服务提供者Provider80、Provider81对应名称为:provider。

②接口中方法为:调用服务的controller方法。

@Component
@FeignClient(value = "PROVIDER")
public interface FeignService {
    //调用远程接口
    @GetMapping("/provider")
    public String hello();
}

(6)创建controller

通过远程接口调用服务。

@RestController
public class FeignController {
    //调用远程服务接口
    @Autowired
    private FeignService feignService;

    @GetMapping("consumer")
    public String hello(){
        //调用接口
        return feignService.hello();
    }
}

6、测试案例

①启动Eureka7001;

②启动服务提供者Provider80,Provider81

③启动服务消费者Consumer83

访问http://localhost:83/consumer,默认轮询策略

第一次请求 

SpringCloud——OpenFeign详解

第二次请求 

SpringCloud——OpenFeign详解 

三、OpenFeign超时控制

1、超时控制概念

默认情况下,Feign客户端只等待一秒钟,一秒后服务提供者未作出响应,服务消费者则会报错。

2、模拟超时报错

(1)服务提供方Provider80写超时方法(controller)

调用TimeUnit让进程睡眠3秒,模拟超时

 @GetMapping("timeout")
    public String timeout(){
        try {
            //睡眠3秒
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "hello";
    }

(2)服务消费者Consumer83添加远程调用方法(Service)

@GetMapping("timeout")
public String timeout();

(3)服务消费者Consumer83添加远程调用方法(Controller)

 @GetMapping("time")
    public String time(){
        return feignService.timeout();
    }

(4)测试

依次启动Eureka7001、Provider80、Consumer83;

访问http://localhost:83/time;

发现超时报错 

SpringCloud——OpenFeign详解 

3、Feign通过配置文件可以控制超时时间

(1)配置服务消费者Consumner83的application.yml

设置客户端超时时间为4秒

ribbon:

  ReadTimeout:  4000

  ConnectTimeout: 4000

  MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用

  MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数,不包括首次调用

  OkToRetryOnAllOperations: false  #是否所有操作都重试

 (2)测试

访问:http:localhost:83/time

等待3秒后访问成功 

SpringCloud——OpenFeign详解 

 

 

版权声明:程序员胖胖胖虎阿 发表于 2022年9月3日 上午11:24。
转载请注明:SpringCloud——OpenFeign详解 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...