深度解析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的簡化、統一和擴展性,才有助於微服務快速發展。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/219684.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 11:00
下一篇 2024-12-09 11:00

相關推薦

發表回復

登錄後才能評論