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-tw/n/219684.html