Spring Cloud的什么
Spring Cloud流应用程序启动器是基于SpringBoot的Spring集成应用程序,提供与外部系统的集成。它利用 Spring Boot 的开发便利性简化了分布式系统的开发。
Spring Cloud的核心功能
- 分布式/版本化配置
- 服务注册和发现
- 路由
- 服务和服务之间的调用
- 负载均衡
- 断路器
- 分布式消息传递
使用SpringCloud的优势
1、服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率
2、可以更精准的制定优化服务方案,提高系统的可维护性
3、微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量
4、适于互联网时代,产品迭代周期更短
Eureka
eureka是一个服务注册和发现模块。Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。
搭建Eureka服务器
1 、首先创建一个maven主工程。
2、配置pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>sc-f-chapter1</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<modules>
<module>eureka-server</module>
<module>service-hi</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后创建二个model工程:一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。
创建完后的工程,其pom.xml继承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依赖,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.forezp</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
3、配置appication.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.
4、创建启动类
在启动类上加上注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
5、eureka server 是有界面的,启动工程,打开浏览器访问: http://localhost:8761
Eureka的自我保护模式
首先启动Eureka服务器和edu微服务,访问注册中心,可以看到,实例是成功注册到中心的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPEMi2G7-1591254389907)(C:\Users\17779\AppData\Roaming\Typora\typora-user-images\1591098014784.png)]
Eureka自我保护机制,它不会剔除已经挂掉的服务,它会认为这个服务是在尝试重新连接的。
Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果低于,就会将当前实例注册信息保护起来,让实例不会过期,尽可能保护这些注册信息。
关闭自我保护
如果在保护期间,实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败。这个时候客户端的容错机制就很重要了
在本地开发时,可使用:eureka.server.enable-self-preservation=false关闭保护机制
在appication.yml中添加
#关闭保护机制,以确保注册中心将不可用的实例正确剔除`
`eureka
server
enable-self-preservation: false`
`#(代表是5秒,单位是毫秒,清理失效服务的间隔 )`
`eureka
server
eviction-interval-timer-in-ms: 5000`
tion.yml中添加
#关闭保护机制,以确保注册中心将不可用的实例正确剔除`
`eureka
server
enable-self-preservation: false`
`#(代表是5秒,单位是毫秒,清理失效服务的间隔 )`
`eureka
server
eviction-interval-timer-in-ms: 5000`