微服务之-Spring-Clou

106 阅读5分钟

Spring Cloud 在 Spring Boot 之上提供了一系列的软件库来增强应用程序的行为和功能, 尤其适合于基于云平台的微服务, 你可以使用基本的默认行为快速开始, 并根据你的需求修改默认配置并扩展成你自定义的方案

它为开发人员提供了快速构建分布式系统中一些常见模式的工具 (例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导者选举,分布式会话,集群状态同步等等).

它为分布式系统的协调提供样板模式,使用Spring Cloud开发人员可以快速开始来实现这些模式的服务和应用程序。 它们适用于任何分布式环境,包括开发人员自己的笔记本电脑,裸机数据中心, 和AWS, Cloud Foundry等托管平台。

Spring Cloud 专注于为典型的应用场景提供开箱即用的体验, 并提供扩展机制来覆盖其他场景.

它的主要功能包含:

  • 分布式和版本控制的配置管理
  • 服务注册和发现
  • 路由
  • 服务间调用
  • 负载均衡
  • 熔断机制
  • 全局锁
  • 领导者选举和集群状态管理
  • 分布式消息

Spring Cloud 是个雨伞项目, 不说包罗万象, 林林总总也有一大堆子项目, 光是正式发布的子项目就有

Spring Cloud Config

由git存储库支持的集中式外部配置管理。 配置资源直接映射到SpringEnvironment,但如果需要,可以由非Spring应用程序使用。

Spring Cloud Netflix

集成了若干 Netflix 开源组件(Eureka, Hystrix, Zuul, Archaius, etc.).

Spring Cloud Bus

用于将服务和服务实例通过分布式消息链接在一起的事件总线, 可用于跨群集传播状态更改, 广播事件通知

Spring Cloud for Cloud Foundry

Cloud Foundry 是开源云的提供商, 如果你嫌AWS太贵的话, 也可以在它的云平台上构建你的应用. Spring Cloud for Cloud Foundry 可将你的应用程序与Pivotal Cloud Foundry 集成。 提供服务发现机制的实现,还可以轻松实现受 SSO 和 OAuth2 保护的资源。

Spring Cloud Open Service Broker

提供构建实现Open Service Broker API的服务代理的起点。

Spring Cloud Cluster

Leadership election and common stateful patterns with an abstraction and implementation for Zookeeper, Redis, Hazelcast, Consul.

对 Zookeeper, Redis, Hazelcast, Consul 这些产品提供一个抽象层, 实现领导者选举和通用状态模式

Spring Cloud Consul

通过 Hashicorp Consul 来实现服务发现和配置管理

Spring Cloud Security

为 Zuul 代理中的负载平衡 OAuth2 Rest 客户端和身份验证头中继提供支持

Spring Cloud Sleuth

Spring Cloud 应用程序的分布式跟踪,兼容与 Zipkin,HTrace 及基于日志(例如ELK)的跟踪系统

Spring Cloud Data Flow

适用于现代运行时的, 可组合的微服务应用程序的 cloud-native 编排服务。 易于使用的DSL,拖放式GUI和REST-API, 共同简化了基于微服务的数据管道的整体编排。

Spring Cloud Stream

轻量级事件驱动的微服务框架,可快速构建连接到外部系统的应用程序, 可使用简单声明模型在Spring Boot应用程序之间使用 Apache Kafka 或 RabbitMQ 发送和接收消息。

Spring Cloud Task

一种短时任务的微服务框架,用于快速构建执行有限数据处理的应用程序, 用简单的声明就可向Spring Boot应用程序添加功能和非功能性的特性。

Spring Cloud Zookeeper

通过 Apache Zookeeper 实现服务发现和配置管理

Spring Cloud for Amazon Web Services

与托管的Amazon Web Services轻松集成, 它提供了一种与AWS 服务进行交互的便捷方式, 使用众所周知的Spring习语和API(如消息传递或缓存API). 开发人员可以围绕托管服务构建应用程序,而无需关心基础结构或维护.

Spring Cloud Connectors

使各种平台中的PaaS应用程序可以轻松连接到数据库和消息代理这样的后端服务。 (该项目以前就称为“Spring Cloud”)

Spring Cloud Starters

Spring Boot 风格的 starter 项目, 用来简化 Spring Cloud 使用者的依赖管理, 现在已经不再维护, 分解成若干了子项目, 比如

  • spring-cloud-starter-config
  • spring-cloud-starter-netflix-eureka-client
  • spring-cloud-stream-app-starters
  • spring-cloud-task-app-starters
  • 等等

Spring Cloud CLI

Spring Boot CLI插件,用于在Groovy中快速创建Spring Cloud组件的应用程序

Spring Cloud Contract

Spring Cloud Contract是一个雨伞项目,包含若干帮助用户成功实施消费者驱动契约 (Consumer Driven Contracts)方法的解决方案。

Spring Cloud Gateway

基于 Reactor 项目的智能可编程软件路由器

Spring Cloud OpenFeign

通过自动配置和绑定到Spring环境, 以及其他Spring编程模型习惯用法, 提供 Spring Boot 应用程序的集成。

Spring Cloud Pipelines

Spring Cloud Pipelines提供了一个强制的部署管道,包含若干步骤, 用来确保你的应用程序可以零停机方式部署并轻松回滚.

Spring Cloud Function

通过函数促进业务逻辑的实现, 它支持 serverless provider 之间的统一编程模型,以及在本地或Paas 平台独立运行的能力。

示例

这么多项目不可能短短几篇文章可以透彻地把它们搞清楚, 咱们挑重点的来讲

  1. 服务注册与发现 Spring Cloud Eureka -- registered service metrics
  2. 服务网关 Spring Cloud Zuul
  3. 客户端负载均衡 Spring Cloud Ribbon
  4. 断路器 Spring Cloud Hystrix -- downstream service metrics
  5. 配置管理 Spring Cloud Config
  6. 服务间调用 Spring Cloud Feign
  7. 服务调用追踪 Spring Cloud Sleuth

Eureka as registry

refer to cloud.spring.io/spring-clou…

package com.github.walterfan.potato.registry;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class PotatoRegistryApplication {

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

}

pom.xml

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
 
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
  • application.properties
spring.application.name=potato-registry

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Micro Service as Eureka Client

<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
	</properties>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

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

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>