SpringCloud介绍
spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
spring cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和 docker 容器概念的火爆,也会让 spring cloud 在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案,意义可能会堪比当年 servlet 规范的诞生,有效推进服务端软件系统技术水平的进步。
SpringCloud技术组成
eureka
微服务治理,服务注册和发现
ribbon
负载均衡,请求重试
hystrix
短路器,服务降级,熔断
feign
ribbon+hystrix继承,并提供生命式客户端
hystrix dashboard和turbine
hystrix微服务监控
zuul
API网关,提供微服务的统一入口,并提供统一的权限验证
config
配置中心
bus
消息总线,配置刷新
sleuth+zipkin
链路跟踪
SpringCloud和Dubbo对比
Dubbo
Dubbo只是一种远程调用(RPC)框架
默认基于长连接,支持多种序列化格式
SpringCloud
框架集
提供了一整套微服务解决方案(全家桶)
eureka注册中心
作用:服务注册和发现

提供者(Provider)
向注册中心注册自己的地址
消费者(Consumer)
从注册中心发现其他服务
eureka的运行机制
注册: 一次次反反复复连接eureka,直到注册成功为止.
拉取: 每隔30秒拉取一次注册表,更新注册信息.
心跳: 每30秒发送一次心跳,3次收不到心跳eureka会删除这个服务.
自我保护模式: 特殊情况,由于网络不稳定15分钟内85%的服务器出现心跳异常.
保护所有注册信息不删除
网络恢复后可以自动退出保护模式
开发测试期间,可以关闭保护模式
搭建eureka服务
1.创建eureka项目


2.配置依赖pom.xml
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tedu</groupId>
<artifactId>sp05-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sp05-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.配置application.yml文件
spring:
application:
name: eureka
server:
port: 2001
eureka:
server:
enable-self-preservation: false #关闭保护模式
instance:
hostname: eureka1 #主机名(集群中区分每台服务器)
client:
register-with-eureka: false
fetch-registry: false
#针对单台服务器,不向自己注册,不从自己拉取
4.启动类注解添加 :@EnableEurekaServer 触发eureka服务器的自动配置
package com.tedu.sp05;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //触发eureka服务器的自动配置
@SpringBootApplication
public class Sp05EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(Sp05EurekaApplication.class, args);
}
}
5.修改host文件, 添加eureka域名映射
添加内容
127.0.0.1 eureka1
127.0.0.1 eureka2

6.启动并访问测试
效果如下

项目中添加eureka
1.添加eureka client依赖
<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>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.yml配置eureka连接地址
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka
3.启动类添加注解 @EnableDiscoveryClient
4.启动并访问测试
效果如下

eureka的高可用
1.配置application.yml文件
spring:
application:
name: eureka-server
#server:
# port: 2001
eureka:
server:
enable-self-preservation: false
# instance:
# hostname: eureka1
# client:
# register-with-eureka: false
# fetch-registry: false
---
spring:
profiles: eureka1
server:
port: 2001
# eureka1 向 eureka2 注册
eureka:
instance:
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:2002/eureka
---
spring:
profiles: eureka2
server:
port: 2002
# eureka2 向 eureka1 注册
eureka:
instance:
hostname: eureka2
client:
service-url:
defaultZone: http://eureka1:2001/eureka
2.配置启动参数
eureka1启动参数
--spring.profiles.active=eureka1


eureka2启动参数
--spring.profiles.active=eureka2



3.访问eureka服务器 查看注册信息


4.eureka客户端注册时向两个服务器注册
在项目中的yml文件中添加eureka服务器路径
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
当一个eureka服务器宕机时可以使用另一台.
效果如下

**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。