您的位置:首页 > 编程语言 > Java开发

基于Spring Cloud教程微服务架构--服务中心Eureka

2018-11-07 14:59 162 查看
版权声明:尊重原创,转载注明出处。 https://blog.csdn.net/Jayslife/article/details/83820411

目录

  • 4. Eureka的服务治理机制
  • 5. Eureka的配置
  • 1. 构建服务中心

    • Spring Cloud Eureka 是 Spring Cloud Netflix 微 服 务 套 件 中 的 一 部 分, 它 基 于 Netflix Eureka 做 了 二 次 封 装, 主 要 负 责 完 成 微 服 务 架 构 中 的 服 务 治 理 功 能。
    • Spring Cloud 通 过 为 Eureka 增 加 了 Spring Boot 风 格 的 自 动 化 配 置, 我 们 只 需 通 过 简 单 引 入 依 赖 和 注 解 配 置 就 能 让 Spring Boot 构 建 的 微 服 务 应 用 轻 松 地 与 Eureka 服 务 治 理 体 系 进 行 整 合。
      – 服 务 注 册: 微服务向服务中心注册服务
      – 服 务 发 现: 调用微服务时通过服务中心进行寻址(负载均衡,轮询机制等)

    2. 服务注册与服务发现

    • Spring Cloud Eureka, 使 用 Netflix Eureka 来 实 现 服 务 注 册 与 发 现, 它 既 包 含 了 服 务 端 组 件, 也 包 含 了 客 户 端 组 件

    Eureka 服 务 端, 我 们 也 称 为 服 务 注 册 中 心。 它 同 其 他 服 务 注 册 中 心 一 样, 支 持 高 可 用 配 置

    Eureka 客 户 端, 主 要 处 理 服 务 的 注 册 与 发 现。 客 户 端 服 务 通 过 注 解 和 参 数 配 置 的 方 式, 嵌 入 在 客 户 端 应 用 程 序 的 代 码 中, 在 应 用 程 序 运 行 时, Eureka 客 户 端 向 注 册 中 心 注 册 自 身 提 供 的 服 务 并 周 期 性 地 发 送 心 跳 来 更 新 它 的 服 务 租 约。

    3. Eureka服务中心搭建

    3.1 新建spring boot 项目

    3.2 pom文件引入依赖

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <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.RC2</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>

    3.3 EurekaServerApplication.java代码

    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
    
    public static void main(String[] args) {
    new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
    }
    }

    3.3 Application.yml配置

    server:
    port: 8761
    
    eureka:
    instance:
    hostname: localhost
    client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    3.4 Eureka信息面板

    • 服务中心启动后,访问默认地址http://localhost:8761/

    4. Eureka的服务治理机制

    4.1服务提供者

    • 服务注册:“服 务 提 供 者” 在 启 动 的 时 候 会 通 过 发 送 REST 请 求 的 方 式 将 自 己 注 册 到 Eureka Server 上, 同 时 带 上 了 自 身 服 务 的 一 些 元 数 据 信 息。Eureka Server 接 收 到 这 个 REST 请 求 之 后, 将 元 数 据 信 息 存 储 在 一 个 双 层 结 构 Map 中;

    • 服务同步:通 过 服 务 同 步, 两 个 服 务 提 供 者 的 服 务 信 息 就 可 以 通 过 这 两 台 服 务 注 册 中 心 中 的 任 意 一 台 获 取 到;

    • 服务续约:在 注 册 完 服 务 之 后, 服 务 提 供 者 会 维 护 一 个 心 跳 用 来 持 续 告 诉 Eureka Server:“ 我 还 活 着”, 以 防 止 Eureka Server 的“ 剔 除 任 务” 将 该 服 务 实 例 从 服 务 列 表 中 排 除 出 去, 我 们 称 该 操 作 为 服 务 续 约( Renew)。

    关 于 服 务 续 约 有 两 个 重 要 属 性, 我 们 可 以 关 注 并 根 据 需 要 来 进 行 调 整:
    leureka.instance.lease-renewal-interval-in-seconds = 30
    leureka.instance.lease-expiration-duration-in-seconds = 90

    4.2 服务消费者

    • 获取服务:当 我 们 启 动 服 务 消 费 者 的 时 候, 它 会 发 送 一 个 REST 请 求 给 服 务 注 册 中 心, 来 获 取 上 面 注 册 的 服 务 清 单。 为 了 性 能 考 虑, Eureka Server 会 维 护 一 份 只 读 的 服 务 清 单 来 返 回 给 客 户 端, 同 时 该 缓 存 清 单 会 每 隔 30 秒 更 新 一 次。

    • 服务调用:服 务 消 费 者 在 获 取 服 务 清 单 后, 通 过 服 务 名 可 以 获 得 具 体 提 供 服 务 的 实 例 名 和 该 实 例 的 元 数 据 信 息。客 户 端 可 以 根 据 自 己 的 需 要 决 定 具 体 调 用 哪 个 实 例, 在 Ribbon 中 会 默 认 采 用 轮 询 的 方 式 进 行 调 用, 从 而 实 现 客 户 端 的 负 载 均 衡。

    • 服务下线:所 以 在 客 户 端 程 序 中, 当 服 务 实 例 进 行 正 常 的 关 闭 操 作 时, 它 会 触 发 一 个 服 务 下 线 的 REST 请 求 给 Eureka Server, 告 诉 服 务 注 册 中 心:“ 我 要 下 线 了”。 服 务 端 在 接 收 到 请 求 之 后, 将 该 服 务 状 态 置 为 下 线( DOWN), 并 把 该 下 线 事 件 传 播 出 去。

    4.3 服务注册中心

    • 失效剔除:Eureka Server 在 启 动 的 时 候 会 创 建 一 个 定 时 任 务, 默 认 每 隔 一 段 时 间( 默 认 为 60 秒) 将 当 前 清 单 中 超 时( 默 认 为 90 秒) 没 有 续 约 的 服 务 剔 除 出 去。

    • 自我保护:Eureka Server 在 运 行 期 间, 会 统 计 心 跳 失 败 的 比 例 在 15 分 钟 之 内 是 否 低 于 85%, 如 果 出 现 低 于 的 情 况( 在 单 机 调 试 的 时 候 很 容 易 满 足, 实 际 在 生 产 环 境 上 通 常 是 由 于 网 络 不 稳 定 导 致), Eureka Server 会 将 当 前 的 实 例 注 册 信 息 保 护 起 来, 让 这 些 实 例 不 会 过 期, 尽 可 能 保 护 这 些 注 册 信 息。

    注意:在 这 段 保 护 期 间 内 实 例 若 出 现 问 题, 那 么 客 户 端 很 容 易 拿 到 实 际 已 经 不 存 在 的 服 务 实 例, 会 出 现 调 用 失 败 的 情 况, 所 以 客 户 端 必 须 要 有 容 错 机 制, 比 如 可 以 使 用 请 求 重 试、 断 路 器 等 机 制。

    5. Eureka的配置

    5.1 Eureka 客 户 端 的 配 置

    主 要 分 为 以 下 两 个 方 面

    1. 服 务 注 册 相 关 的 配 置 信 息, 包 括 服 务 注 册 中 心 的 地 址、 服 务 获 取 的 间 隔 时 间、 可 用 区 域 等。
    2. 服 务 实 例 相 关 的 配 置 信 息, 包 括 服 务 实 例 的 名 称、 IP 地 址、 端 口 号、 健 康 检 查 路 径 等。

    5.2 Eureka 服务端配置

    • Eureka 服 务 端 更 多 地 类 似 于 一 个 现 成 产 品, 大 多 数 情 况 下, 我 们 不 需 要 修 改 它 的 配 置 信 息。
      -
    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: