Spring Cloud简介
Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中设计的配置管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话和集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud子项目
① Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新,加密/解密配置内容等。
② Spring Cloud Netflix:核心组件,对多个Netflix OSS开源套件进行整合。
- Eureka:服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
- Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
- Ribbon:客户端负载均衡的服务调用组件。
- Feign:基于Ribbon和Hystrix的声明式服务调用组件。
- Zuul:网关组件,提供智能路由、访问过滤等功能。
- Archaius:外部化配置组件。
③ Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新配置。
④ Spring Cloud Cluster:针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。
⑤ Spring Cloud Consul:服务发现与配置管理工具。
⑥ Spring Cloud Stream:通过Redis、Rabbit或者Kafka实现的消费微服务,可以通过简单的声明式模型来发送和接收消息。
⑦ Spring Cloud Security:安全工具包,提供在Zuul代理中对OAuth2客户端请求的中继器。
⑧ Spring Cloud Sleuth:Spring Cloud 应用的分布式跟踪实现,可以完美整合 Zipkin。
⑨ Spring Cloud ZooKeeper:基于ZooKeeper 的服务发现与配置管理组件。
⑩ Spring Cloud Starters:Spring Cloud 的基础组件,它是基于Spring Boot 风格项目的基础依赖模块。
组件架构
实战项目简介(Springcloud_Sell)
本次实战以Springboot+maven为基础进行快速配置,采用分布式微服务架构下的一站式解决方案Spring Cloud,集成组件Eureka+Config+Zuul+Feign/Ribbon+Hystrix+RabbitMQ+Redis+Sleuth+ZipKin。
开发环境:JDK1.8+MySQL5.7 + IDEA
Git地址:https://gitee.com/jiayuan1234/Springcloud_Sell
项目模块主要有:api-gateway(网关),client(客户端),config(配置中心),erurka(服务注册与发现中心),order(订单模块),product(商品模块),user(用户模块)
项目包结构:
搭建服务注册中心(eureka)
创建一个基础的springboot工程,命名为eureka,并在pom.xml中引入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<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>
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行注册,通过springboot工程一键部署和启动
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
application.yml配置如下,在默认配置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们可以选择禁用它的客户端注册行为,即 eureka.client.register-with-eureka: false
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8761
在完成如上配置后,启动工程,访问 http://localhost:8761/ ,显示eureka注册中心面板如下
注册服务提供者(client)
完成了注册中心的搭建,尝试将一个springboot应用注册到eureka的服务治理体系中去,搭建一个springboot应用并加入如下依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
client端配置文件如下:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
#instance:
# hostname: clientName
spring:
application:
name: client
server:
port: 8081
通过@EnableEurekaClient注解启动一个eureka客户端,提供服务,进行服务注册,@EnableEurekaClient本身就是用@EnableDiscoveryClient来实现的
@SpringBootApplication
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
在eureka注册中心页面刷新,此时client已经将服务注册到eureka上
统一配置中心(config)
创建一个springboot应用,pom.xml依赖以上面客户端相同,同样将自己作为一个客户端服务,也是要注册到eureka中去的,application.yml配置文件如下,将远程Git地址和账号密码配置到文件中去,用于向远程文件拉取相关配置。注意,配置中心拉取的配置会与本地已有配置进行合并,若相同则覆盖。
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://gitee.com/jiayuan1234/config-repo
username: [email protected]
password: **********
basedir: D:\MyData\workspace\IDEA\SpringCloud_Sell\config\basedir
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
management:
endpoints:
web:
exposure:
include: "*"
server:
port: 8082
远程Git配置文件
启动config项目,获取配置文件内容
(未完待续~)