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的简化、统一和扩展性,才有助于微服务快速发展。