springcloud简介
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。
常用组件介绍
Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
Netflix Eureka:注册发现中心,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
Feign: 一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
Ribbon: 一个基于HTTP和TCP客户端的负载均衡器。
Spring Cloud Sleuth: 日志收集工具包,封装了Dapper,Zipkin和HTrace操作
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
常用功能代码实现
eureka
该组件为springcloud基础组件,需要提供接口服务的需要引入该组件
pom修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Angel.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
springboot启动main类新增1
@EnableEurekaClient
properties配置文件
1 | eureka.client.registerWithEureka = true |
其中eureka.client.serviceUrl.defaultZone可配置多个eureka 以逗号分隔,保证高可用。
Feign
需要调用注册到eureka上的服务需要引入该组件
pom修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Angel.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
springboot启动main类新增1
@EnableFeignClients
feign依赖的接口,模拟http请求,对应定义出服务提供方的出入参,请求方式等即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 此处对应eureka中注册的小写名称
@FeignClient("compute-service")
public interface ComputeClient {
@RequestMapping(method = RequestMethod.GET, value = "/add")
Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b);
/**
*
* @param user
* @return
*/
@RequestMapping(method = RequestMethod.POST, value = "/addp",consumes = "application/json")
Integer addp(@RequestBody User user);
}
调用方式如下1
2
3
4
5
6
7
8
9
10
11
12
13
14@Autowired
private ComputeClient computeClient;
/**
* 调用方
* @return
*/
@RequestMapping(value = "/testzd", method = RequestMethod.GET)
public Integer test(){
User user = new User();
user.setA(1);
user.setB(2);
return computeClient.addp(user);
}
hystrix
针对某个接口提供限流,等待超时的
pom修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Angel.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
springboot启动main类新增1
@EnableHystrix
1 | /** |
如上,当请求处理超时或者并发量超过配置时会调用降级方法addpdegrade()。