关于java:SpringCloud梳理eureka

34次阅读

共计 4747 个字符,预计需要花费 12 分钟才能阅读完成。

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. 启动并拜访测试

拜访:* 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: 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 服务器 查看注册信息

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

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

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

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

正文完
 0