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服务器的主动配置@SpringBootApplicationpublic class Sp05EurekaApplication {    public static void main(String[] args) {        SpringApplication.run(Sp05EurekaApplication.class, args);    }}
5.批改host文件, 增加eureka域名映射
增加内容
127.0.0.1       eureka1127.0.0.1       eureka2

6.启动并拜访测试

拜访:* http://eureka1:2001
成果如下

我的项目中增加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.启动并拜访测试

拜访:http://eureka1:2001
成果如下

eureka的高可用

1.配置application.yml文件

spring:  application:    name: eureka-server    #server:#  port: 2001eureka:  server:    enable-self-preservation: false#  instance:#    hostname: eureka1#  client:#    register-with-eureka: false#    fetch-registry: false---spring:  profiles: eureka1server:  port: 2001  # eureka1 向 eureka2 注册eureka:  instance:    hostname: eureka1  client:    service-url:       defaultZone: http://eureka2:2002/eureka---spring:  profiles: eureka2server:  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服务器 查看注册信息

拜访地址:http://eureka1:2001/

拜访地址:http://eureka2:2002/

4.eureka客户端注册时向两个服务器注册

在我的项目中的yml文件中增加eureka服务器门路
eureka:  client:    service-url:      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
当一个eureka服务器宕机时能够应用另一台.
成果如下