Table of Contents

简述

Netflix

Config

Bus

CloudFoundry

Open Service Broker

Cluster

Consul

Security

Sleuth

Data Flow

Stream

Stream APP Starters

Task

Task APP Starters

Zookeeper

OpenFeign

Gateway

Contract

Pipelines


简述

Spring Cloud 提供了配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选分布式会话和集群状态管理等,一系列的解决方案

  1. Config:配置管理工具,支持 git 存储配置实现应用外部配置化,支持远程客户端读取配置并根据初始化参数启动项目
  2. Netflix:核心组件
  3. Eureka:服务治理组件,可以注册服务接口中心
  4. Hystrix:容错管理组件,实现断路器模式,服务依赖中出现的延迟和故障提供容错性
  5. Ribbon:客户端负载均衡服务调用组件
  6. Feign:基于 Hystrix 和 Ribbon 声明式服务调用组件
  7. Zuul:提供路由,访问过滤
  8. Archaius:外部化配置参数组件
  9. Bus:事件消息总线,用于将服务和服务实例与分布式消息传递连接在一起的事件总线。触发后续作业的业务联动性
  10. Cluster:针对 Zookeeper、Redis、Hazelcast、Consul 的选举算法和通用状态模式的实现
  11. CloudFoundry:与 pivotalCloudFoundry 的整合支持
  12. Consul:服务发现与配置管理工具
  13. Stream:通过 Redis、RabbitMQ、Kafka 实现消息微服务,通过消息队列的形式生产和消费消息
  14. Security:安全管理组件
  15. Sleuth:SpringCloud 分布式跟踪,兼容Zipkin、HTrace和基于日志的跟踪(如ELK)。
  16. Zookeeper:基于 Zookeeper 的服务发现和配置管理组件
  17. Starts:基础组件,基于 SpringBoot 风格的基础依赖模块

Netflix

Spring Cloud Netflix 为 Spring Boot 程序提供了 Netflix OSS 集成,自动配置和绑定 Spring 环境和 Spring 编程模型。通过一些简单的注解,可以快速启用和配置程序中的常见模式,并使用 Netflix 组件构建大型分布式系统。提供的模式包括服务发现(Eureka)、断路器(Hystrix)、智能路由(Zuul)、客户负载均衡(Ribbon)。

Spring Cloud Netflix 特点:

  • 服务发现:注册 Eureka 实例,客户端可以通过 Spring-manage 发现这些实例
  • 服务发现:可以使用声明性 Java 配置创建嵌入式 Eureka 服务器
  • 断路器:可以使用一个简单的注解来构建 Hystrix 客户端
  • 断路器:带有声明性 Java 配置的嵌入式 Hystrix 仪表盘
  • 声明式 REST 客户端:Feign 创建一个使用 JAX-RS 或 Spring MVC 注解的接口的动态实现
  • 客户端负载均衡器:Ribbon
  • 外部配置:从 Spring 环境到 Archaius 的桥梁(使用 SpringBoot 启用 Netflix 的本地配置)
  • 路由和过滤:自动重置 Zuul 过滤器,使用简单的约定优于配置的方法来反向创建代理

入门

只要 Spring Cloud Netflix 和 Eureka Core 在 classpath 上,任何带有 @EnableEurekaClient 注解的 SpringBoot 程序都会连接 Eureka 服务器 http:\\localhost:8761(默认值 eureka.client.serviceUrl.defaultZone

@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello World";
  }

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

}

使用 spring-cloud-starter-netflix-eureka-server 依赖和 @EnableEurekaServer 注解运行你自己的服务器

Config

Spring Cloud Config 为分布式系统中的外部化配置提供了服务器和客户端支持。配置服务提供了一个中心位置来管理跨所有环境的程序的配置。客户机和服务器上的概念与 Spring Environment 和 PropertySource 抽象完全相同,因此它们非常适合 Spring 应用程序,而且可以用于以任何语言运行的任何应用程序。当应用程序通过部署管道从 dev 迁移到测试并进入生产环境时,可以管理这些环境之间的配置,并确保应用程序在迁移时拥有所需的一切配置信息。默认使用 Git 作为存储后端,支持配置环境的标记版本,可以通过各种编辑工具来修改内容。更容易添加配置。

特点

服务端

  • 用于外部配置的基于资源的 API( KV 对,或等效的 YAML 内容)
  • 加密和解密属性值(对称或非对称)
  • 使用 @EnableConfigServer 很容易嵌入到 Spring 启动应用程序中

客户端(Spring Applications)

  • 绑定到配置服务器并使用远程属性源初始化 Spring 环境
  • 加密和解密属性值(对称或非对称)

入门

只要 Spring Boot Actuator 和 Spring Config 在类路径中,任何 Spring Boot 程序都将试图连接 http:\\localhost:8888,默认值 :spring.cloud.config.uri。可以在系统配置或环境配置中在 bootstrap.properties/yml 中修改 spring.cloud.config.uri。

@Configuration
@EnableAutoConfiguration
@RestController
public class Application {

  @Value("${config.name}")
  String name = "World";

  @RequestMapping("/")
  public String home() {
    return "Hello " + name;
  }

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

}

 实例中 config.name 的之值可能来自本地配置或远程服务器配置。默认情况下,配置服务器优先。查看程序中 configServer 属性源的 /env 节点。

要运行自己的服务器,请使用 spring-cloud-config-server 依赖项和 @EnableConfigServer。如果您设置了spring.config.name=configserver,应用程序将运行在端口8888上,并提供来自示例存储库的数据。您需要一个 spring.cloud.config.server.git.uri 用于根据您自己的需要定位配置数据(默认情况下,它是 git 存储库的位置,可以是一个本地文件:..URL)。

Bus

Spring Cloud Bus 使用轻量级消息代理连接分布式系统节点,可以用来广播状态修改或其他管理指令。目前唯一的实现是使用 AMQP 代理作为传输,但是相同的基本功能集(以及更多依赖于传输的功能)在其他传输的路线图上。

入门

只要 Spring Cloud Bus AMQP 和 RabbitMQ 在类路径上,任何 Spring 启动应用程序都会尝试联系本地主机上的 RabbitMQ 服务器 localhost:5672 spring.rabbitmq.addresses 的默认值)

@Configuration
@EnableAutoConfiguration
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello World";
  }

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

}

CloudFoundry

集成带有 Cloud Foundry 的程序。提供服务发现实现,简单实现 SSO 和 OAuth2 受保护资源。

Open Service Broker

Spring Cloud Open Service Broker 是一个用 Spring Boot 构建的一个用来实现 Open Service Broker API 的应用程序。

Open Service Broker API 项目允许开发人员将服务交付给在云原生平台如 Cloud Foundry、Kubernetes 和 OpenShift 中运行的应用程序。Spring Cloud Open Service Broker 提供了一个基于 Spring Boot 的框架,允许在支持 Open Service Broker API 的平台上为自己管理的服务快速创建服务代理。

Spring Boot Config入门

在项目中使用 Spring Cloud Open Service Broker 的推荐方法是使用依赖项管理系统。可以将下面的一个代码片段复制并粘贴到 pom.xml 中。

3.x Release

在应用程序中包含 Spring Boot starter POM。这个初学者支持 Spring MVC 和基于 Spring WebFlux 的应用程序。

Maven:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-open-service-broker</artifactId>
        <version>3.0.4.RELEASE</version>
    </dependency>
</dependencies>

Gradle:

dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-open-service-broker:3.0.4.RELEASE'
}

2.x Release

在应用程序中包含 Spring Boot starter POM。这个启动程序只支持基于 Spring MVC 的应用程序。

Maven:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-open-service-broker-webmvc</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>
</dependencies>

Gradle:

dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-open-service-broker-webmvc:2.1.2.RELEASE'
}

Cluster

Spring Cloud Cluster 为在分布式系统中构建“集群”特性提供了一组原语。例如领导权选举、集群状态的一致存储、全局锁和一次性令牌。

Consul

通过自动配置并绑定到 Spring 环境和其他 Spring 编程模型习惯用法,Spring Cloud Consul 为 Spring 启动应用程序提供了 Consul 集成。通过一些简单的注释,您可以快速启用和配置应用程序中的公共模式,并使用 Hashicorp’s Consul 构建大型分布式系统。提供的模式包括服务发现、分布式配置和控制总线。

特点

  • 服务发现:可以向 Consul agent 注册实例,客户端可以使用 spring 管理的 bean 发现实例
  • 支持 Ribbon,客户端负载均衡通过 Spring Cloud Netflix
  • 支持 Spring Cloud LoadBalbacer —— Spring Cloud 项目提供的客户端负载平衡器
  • 支持 Zuul——Spring Cloud Netflix 动态路由和过滤器
  • 分布式配置——使用 Consul KV 存储
  • 控制总线——使用 Consul Events 的分布式控制事件

入门

只要 Spring Cloud Consul 和 Consul API 在类路径上,任何带有 @EnableDiscoveryClient 的 Spring 启动应用程序都将尝试联系localhost:8500上的 Consul agen t( spring.cloud.consul.host 和 spring.cloud.consul.port 默认值):

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello World";
  }

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

}

本地 Consul agent 必须运行。

Security

Spring Cloud Security 为构建安全的应用程序和服务提供了一组基本的方法。可以在外部(或集中)进行大量配置的声明式模型有助于实现大型系统的协作、远程组件,通常使用中央身份管理服务。它在云计算(Cloud Foundry)这样的服务平台上也非常容易使用。基于Spring Boot和Spring Security OAuth2,我们可以快速创建实现单点登录、令牌中继和令牌交换等常见模式的系统。

特点

  • 在 Zuul 代理中将 SSO 令牌从前端传输到后端服务
  • 在资源服务器之间传输令牌
  • 拦截器拦截 Fegin 客户端行为,类似于 OAuth2RestTemplate(获取 token 等)
  • 在 Zuul 代理中配置下游身份验证

入门

如果您的应用程序也有一个 Spring Cloud Zuul 嵌入式反向代理(使用 @EnableZuulProxy) ,那么您可以要求它将 OAuth2 访问令牌转发到其代理的服务。因此,上面的SSO应用程序可以简单地增强如下:

@SpringBootApplication
@EnableOAuth2Sso
@EnableZuulProxy
class Application {

}

它(除了登录用户并获取一个令牌之外)将身份验证令牌下发给 /proxy/* 服务。如果这些服务是用 @EnableResourceServer 实现的,那么它们将在正确的请求头中获得有效的令牌。

Sleuth

Spring Cloud Sleuth 为 Spring Cloud 实现了一个分布式跟踪解决方案,大量借鉴了 Dapper、Zipkin 和 HTrace。对于大多数用户来说,Sleuth 应该是不可见的,与外部系统的所有交互都应该自动检测。可以简单地在日志中捕获数据,或者将其发送到远程收集器服务。

特点

Span 是工作的基本单位。例如,发送 RPC 和向 RPC 发送响应一样,都是一个新的 Span。Span 的标识符是一个惟一的64位ID(用于 Span)和另一个64位ID(用于 Span 所属的跟踪)。span还包含其他数据,比如描述、键值注释、导致它们的 span 的 ID 以及进程 ID(通常是 IP 地址)。Spans 被启动和停止,它们记录它们的时间信息。一旦你创建了一个 span,你必须在将来的某个时候停止它。形成树状结构的一组跨度,称为 Trace。例如,如果您正在运行一个分布式大数据存储,那么可以通过一个put请求形成一个 trace。

  • 将 trace 和 span id 添加到 Slf4J MDC,这样您就可以在日志聚合器中从给定的跟踪或跨度提取所有日志。
  • 提供对常见分布式跟踪数据模型的抽象:跟踪、跨越(形成DAG)、注释、键值注释。松散地基于 HTrace,Zipkin (Dapper)兼容。
  • 测试来自 Spring 应用程序的常见入口点和出口点( servlet fliter、rest template、scheduled actions, message channels, zuul filters, feign client)。
  • 如果 spring-cloud- sleud -zipkin 可用,那么该应用程序将通过 HTTP 生成并收集 zipkin 兼容的 trace。默认情况下,它将它们发送到本地主机(端口9411)上的 Zipkin 收集器服务。使用 spring.zipkin.baseUrl 配置服务的位置。

添加依赖

Maven

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth</artifactId>
            <version>${spring-cloud-sleuth.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>

Gradle

buildscript {
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE"
    }
}

apply plugin: "io.spring.dependency-management"

dependencyManagement {
     imports {
          mavenBom "org.springframework.cloud:spring-cloud-sleuth:${springCloudSleuthVersion}"
     }
}
dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
}

只要 Spring Cloud Sleuth 在类路径上,任何 Spring 启动应用程序都会生成跟踪数据::

@SpringBootApplication
@RestController
public class Application {

  private static Logger log = LoggerFactory.getLogger(DemoController.class);

  @RequestMapping("/")
  public String home() {
    log.info("Handling home");
    return "Hello World";
  }

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

}

运行这个应用程序,然后点击主页。您将看到在日志中填充了traceId和spanId。如果这个应用程序调用另一个(如与RestTemplate),它将发送跟踪数据的标题,如果接收者是另一个侦察应用程序,你会看到跟踪继续在那里。

  • 不需要显式地在处理程序中记录请求,您可以设置 logging.level.org.springframework.web.servlet. dispatcherservlet =DEBUG
  • 如果您使用 Zipkin (直到2.1.x),可以通过设置 spring. sleux .sampler 来配置跨度输出的概率。概率(默认值:0.1,即10%)。否则,你可能会认为 Sleuth 不工作,因为它省略了一些跨度。从2.2.0开始,Sleuth将默认为速率有限采样器。这意味着它每秒将采样最多1000个事务。
  • 设置spring.application.name=bar(实例)来查看服务名称以及跟踪和跨度id。

Data Flow

计算和 Kubernetes 的基于微服务的流和批数据处理。

Spring Cloud Data Flow 提供了创建复杂拓扑的工具,用于流式和批处理数据管道。数据管道由 Spring Boot 应用程序组成,使用Spring Cloud Stream 或 Spring Cloud Task 微服务框架构建。

Spring Cloud Data Flow 支持一系列数据处理用例,从 ETL 到导入/导出、事件流和预测分析。

特点

Spring Cloud Data Flow 服务使用 Spring Cloud Deployer,将由 Spring Cloud Stream 或 Spring Cloud Task 应用程序组成的数据管道部署到 Cloud Foundry 和 Kubernetes 等现代平台上。

为各种数据集成和处理场景选择预先构建的流和任务/批处理启动程序有助于学习和实验。

针对不同中间件或数据服务的自定义流和任务应用程序可以使用熟悉的 Spring Boot 风格编程模型构建。

一个简单的流管道 DSL 可以很容易地指定要部署哪些应用程序,以及如何连接输出和输入。当一系列任务应用程序需要作为有向图运行时,组合任务 DSL 非常有用。

仪表板提供了一个图形化编辑器,用于交互式地构建数据管道,以及可部署应用程序的视图,并使用 Prometheus、InfluxDB 或其他监控系统的指标来监视它们。

Spring Cloud Data Flow 服务公开了用于组合和部署数据管道的 REST API。一个单独的 shell 使得从命令行使用 API变 得很容易。

入门

官方:Spring Cloud Data Flow Microsite

Stream

Spring Cloud Stream是一个框架,用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务。

该框架提供了一个灵活的编程模型,该模型建立在已经建立的和熟悉的 Spring习 惯用法和最佳实践的基础上,包括对持久的发布/订阅语义、用户组和有状态分区的支持。

Spring Cloud Stream 支持各种绑定器实现,下表包含到 GitHub 项目的链接。

Spring Cloud Stream 的核心构件有:

  • Destination Binders:负责与外部消息传递系统集成的组件。
  • Destination Bindings:外部消息传递系统和应用程序之间的桥梁提供了消息的生产者和消费者(由 Destination Binders 创建)。
  • Message:生产者和消费者用于与 Destination Binders (从而通过外部消息传递系统与其他应用程序)通信的规范化数据结构。

Stream APP Starters

Spring Cloud Stream App Starters 是基于 Spring Boot 的 Spring Integration 应用程序,它提供与外部系统的集成。

Task

Spring Cloud Task允许用户使用Spring Cloud开发和运行短期的微服务,并在本地、云中甚至在Spring Cloud数据流上运行它们。只需添加@EnableTask并作为一个Spring启动应用程序(单个应用程序上下文)运行您的应用程序。

官方:https://docs.spring.io/spring-cloud-task/docs/2.0.0.RELEASE/reference/htmlsingle/#getting-started

Task APP Starters

Spring Cloud Task Application Starters 可以是任意 Spring Boot 程序。https://projects.spring.io/spring-batch[Spring Batch] 不会停止的 job,他们会在某个点结束或停止。Spring Cloud Task APP Starters 可以与Spring Cloud Data Flow 一起使用,以创建、部署和编排短期的数据微服务。

Spring Cloud ask Application Starters 是独立的可执行应用程序,可用于随需应变的用例,如数据库迁移、机器学习和计划的操作。这些应用程序可以在各种运行时平台上独立运行,包括:Cloud Foundry、Kubernetes、Docker,甚至在您的笔记本电脑上。

特点

  • 作为 Spring Boot 应用程序独立运行
  • 编排为临时数据微服务
  • 将数据微服务应用程序作为 maven 或 docker 构建使用
  • 通过命令行、环境变量或 YAML 文件覆盖配置参数
  • 提供隔离测试应用程序的基础设施
  • 从这个版本的 Spring Initializr 中下载

可用的应用程序

  • composed-task-runner
  • jdbchdfs-local
  • timestamp
  • timestamp-batch

运行一个示例任务启动程序

  1. 从这里下载最新的时间戳应用程序[例如:/1.3.0.RELEASE/timestamp-task-1.3.0.RELEASE.jar]
  2. 运行应用程序的时间戳
    java -jar timestamp-task-***.jar
  3. 在控制台中验证时间戳日志
  4. 验证时间戳应用程序关闭

Task App Starters and Spring Cloud Data Flow (**)

Artifact Type

Stable Release

Milestone/Snapshot Release

Maven

http://bit.ly/Clark-GA-task-applications-maven

http://bit.ly/Dearborn-M1-task-applications-maven

Docker

http://bit.ly/Clark-GA-task-applications-docker

http://bit.ly/Dearborn-M1-task-applications-docker

(**)通过查看参考指南中的 app-registration 部分,了解如何在 Spring Cloud Data Flow 中使用 app-starters

应用程序的HTTP存储库位置

在这里你可以找到任务应用的uber jar的直接链接。

Zookeeper

Spring Cloud Zookeeper 通过自动配置和绑定到 Spring 环境以及其他 Spring 编程模型习惯用法,为 Spring 引导应用程序提供 Apache Zookeeper 集成。通过一些简单的注释,您可以快速启用和配置应用程序中的公共模式,并使用 Zookeeper 构建大型分布式系统。提供的模式包括服务发现和分布式配置。

特点

  • 服务发现:可以向 Zookeeper 注册实例,客户端可以使用 spring 管理的 bean 发现实例
  • 支持 Ribbon:通过Spring Cloud Netflix 客户端负载均衡
  • 支持 Zuul:Spring Cloud Netflix 的动态路由和过滤器
  • 分布式配置:使用 Zookeeper 作为存储

入门

只要 Spring Cloud Zookeeper、Apache administrator 和 Zookeeper Java 客户端在类路径上,任何带有 @EnableDiscoveryClient 的 Spring 启动应用程序都会尝试联系 localhost:2181 上的 Zookeeper 代理(zookeeper.connectString的默认值)。

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello World";
  }

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

}

必须运行本地Zookeeper服务器。

OpenFeign

本项目通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring 引导应用程序提供 OpenFeign 集成。

特点

  • 声明性 REST 客户端:Feign 创建一个使用 JAX-RS 或 Spring MVC 注释修饰的接口的动态实现
@SpringBootApplication
@EnableFeignClients
public class WebApplication {

	public static void main(String[] args) {
		SpringApplication.run(WebApplication.class, args);
	}

	@FeignClient("name")
	static interface NameService {
		@RequestMapping("/")
		public String getName();
	}
}

官方:https://github.com/OpenFeign/feign

Gateway

该项目提供了一个库,用于在 Spring MVC 之上构建 API 网关。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 api,并为它们提供交叉关注点,例如:安全性、监视/指标和弹性。

特点

  • 基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建
  • 能够匹配任何请求属性的路由。
  • 判断过滤指定路由
  • Hystrix 断路器集成
  • Spring Cloud DiscoveryClient 集成
  • 易于编写判断和路由
  • 请求速率限制
  • 路径重写
@SpringBootApplication
public class DemogatewayApplication {
	@Bean
	public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
		return builder.routes()
			.route("path_route", r -> r.path("/get")
				.uri("http://httpbin.org"))
			.route("host_route", r -> r.host("*.myhost.org")
				.uri("http://httpbin.org"))
			.route("rewrite_route", r -> r.host("*.rewrite.org")
				.filters(f -> f.rewritePath("/foo/(?<segment>.*)", "/${segment}"))
				.uri("http://httpbin.org"))
			.route("hystrix_route", r -> r.host("*.hystrix.org")
				.filters(f -> f.hystrix(c -> c.setName("slowcmd")))
				.uri("http://httpbin.org"))
			.route("hystrix_fallback_route", r -> r.host("*.hystrixfallback.org")
				.filters(f -> f.hystrix(c -> c.setName("slowcmd").setFallbackUri("forward:/hystrixfallback")))
				.uri("http://httpbin.org"))
			.route("limit_route", r -> r
				.host("*.limited.org").and().path("/anything/**")
				.filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter())))
				.uri("http://httpbin.org"))
			.build();
	}
}

要运行您自己的网关,请使用 spring-cloud-starter-gateway 依赖项。

Contract

 

Pipelines

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐