SpringCloud梳理-eureka

BolunWu

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注册中心

作用:服务注册和发现

image

提供者(Provider)
向注册中心注册自己的地址
消费者(Consumer)
从注册中心发现其他服务

eureka的运行机制

注册: 一次次反反复复连接eureka,直到注册成功为止.
拉取: 每隔30秒拉取一次注册表,更新注册信息.
心跳: 每30秒发送一次心跳,3次收不到心跳eureka会删除这个服务.
自我保护模式: 特殊情况,由于网络不稳定15分钟内85%的服务器出现心跳异常.
保护所有注册信息不删除
网络恢复后可以自动退出保护模式
开发测试期间,可以关闭保护模式

搭建eureka服务

1.创建eureka项目

image
image

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

image

6.启动并访问测试

访问:* http://eureka1:2001

效果如下

image

项目中添加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

效果如下

image

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

image
image

eureka2启动参数

--spring.profiles.active=eureka2

image
image
image

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

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

image

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

image

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

在项目中的yml文件中添加eureka服务器路径

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

当一个eureka服务器宕机时可以使用另一台.

效果如下

image

阅读 340
4 声望
3 粉丝
0 条评论
你知道吗?

4 声望
3 粉丝
宣传栏