您的位置:

深度解析Spring Cloud Finchley

Spring Cloud是一个基于Spring Boot的快速开发框架,它为分布式系统中的配置管理、服务发现、断路器、负载均衡、API网关等集成了多种开源项目的实现方案。

一、简介

Spring Cloud Finchley是Spring Cloud在2018年发布的最新版本,它使用Spring Boot 2.0.x作为底层框架,Spring Cloud Finchley版本的主要特点是对Spring Boot 2.0.x支持更好,同时新增并推广Spring Cloud Gateway来代替Zuul作为路由和过滤网关等增强功能的追加。


    <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Finchley.SR1</version>
        <relativePath>.</relativePath>
    </parent>
    <dependencyManagement>
        <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>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
        </dependencies>
    </dependencyManagement>

二、服务发现

Spring Cloud Finchley作为微服务的开发框架,其最重要的特性是“服务发现”。

服务发现

服务发现是指维系着服务实例地址的工具,在微服务架构中,每个微服务都要注册到服务发现器中,同时也要从服务发现器中去查找其他服务的实例,这个机制就是服务发现机制。Spring Cloud Finchley提供了两种主流的服务发现机制:Consul和Eureka。另外,Spring Boot 2.x提供了自带的服务发现组件,通过@EnableDiscoveryClient注解即可开启服务发现。


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

当Spring Boot应用程序以@EnableDiscoveryClient注解为启动参数运行时,Spring Cloud就会自动将应用程序注册到Discovery Server中,当有新的服务提供者注册到Discovery Server时,所有的服务消费者会接收到响应事件并更新服务路由信息,从而维持服务正常的调用。

三、服务调用

在微服务架构中,一个服务调用了其他服务的实例,并且通过负载均衡等工具实现平滑的服务调用,Spring Cloud Finchley提出了Rest服务调用的规范:Feign。

Feign

Feign作为Spring Cloud的核心组件之一,可以让您更方便地编写客户端,接口的定义方式更类似于Spring MVC的控制器,而不像使用Spring-Cloud-Ribbon那样需要在代码中通过各种特定的注解来定义负载均衡等配置。Feign的默认负载均衡机制是使用Round-Robin的算法实现的。


    @FeignClient(name = "xxx", url = "http://xxx:xx")
    public interface XXXClient {
      @GetMapping("/xxx")
      String xxx();
    }

四、路由网关

Spring Cloud Finchley对网关的要求更高,推荐使用Spring Cloud Gateway代替Zuul成为默认的动态路由网关。

Gateway

Gateway能够解决更高级的动态路由和过滤问题,它使用标准的Spring Boot注册发现机制,因此可以与任何其他组件无缝集成。Spring Cloud Gateway还支持多种请求协议,如WebSocket,以及使用不同的数据源(如Consul,Etcd,Zookeeper等)的不同路由规则消费服务发现实例。此外,Gateway还具备更大的灵活性,支持过滤器和自定义拦截器等机制的灵活组合。


    @Configuration
    public class MyGatewayConfig {
      @Bean
      public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
          .route(p -> p
            .path("/get")
            .filters(f -> f.addRequestHeader("Hello", "World"))
            .uri("http://httpbin.org:80"))

            .route(p -> p
              .host("*.hystrix.com")
              .filters(f -> f.hystrix(c -> c
                .setName("mycmd")
                .setFallbackUri("forward:/fallback")))
              .uri("http://httpbin.org:80"))
          .build();
      }
    }

五、总结

通过本篇文章的介绍,相信您对Spring Cloud Finchley有更全面的了解,包括其主要特性、服务发现、调用、路由网关等方面的内容。Spring Cloud Finchley提供了一个通用的微服务开发框架,简化了大型分布式系统中的开发工作和维护难度。正是因为Spring Cloud Finchley的简化、统一和扩展性,才有助于微服务快速发展。