Spring Cloud Eureka服务治理的实现

什么是Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud 中的一个组件,它是基于 Netflix Eureka 做了二次封装,主要是负责完成微服务框架中服务治理的功能。Spring Cloud通过为 Eureka 增加了 Spring Boot 风格的自动化配置,我们只需要通过简单的引用依赖和注解就能让 Spring Boot 够将的微服务应用轻松的与 Eureka 服务治理体系进行整合。

服务治理

服务治理是微服务框架中最为核心和基础的模块,它主要是用来实现各个微服务实例的自动化注册与发现。

最初开始,可能构建的微服务系统服务并不是很多,我们可以通过一些静态配置来完成服务的调用。比如有两个服务 A 和 B,其中 A 服务需要调用 B 服务来完成一个业务操作时,为了实现 B 服务的高可用,无论我们采用服务端的复杂均衡,还是客户端的负载均衡,我们都需要手工的来维护一份 B 的实例列表。但是随着业务的发展,系统功能越来越复杂,相应的微服务也是越来越多,这种静态手工维护的难度会越来越高。

为了解决这种问题,产生了大量的服务治理的框架和产品。这些框架其实都是围绕着服务注册和服务发现机制来完成对微服务应用实例的自动化管理。

服务注册

在服务治理框架中,通常都会构建一个服务注册中心,每个服务实例单元向注册中心登记自己的服务,将实例主机位置、端口号、版本号、通信协议等一系列附加信息告诉注册中心,注册中心按服务名分类组织服务清单。

服务发现

由于在服务治理框架下操作,服务间的通信与调用不再是通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。所以,服务调用方在调用服务提供方的接口时,并不知道具体的服务实例位置。因此,需要先向注册中心发起查询请求,获取实例清单,以实现对具体服务实例的访问。

搭建 Eureka 注册中心服务

搭建单中心Eureka

  • Spring Cloud 版本:Finchley.BUILD-SNAPSHOT
  • Spring Boot 版本:2.0.2.RELEASE

我们之后的所有开发都会基于以上版本进行操作,需要注意的是:Sring Cloud 使用的是 SNAPSHOT 版,所以需要在 pom 文件中指定仓库的地址。

首先,我们新建一个 Spring Boot 工程,命名为:spring-cloud-eureka,并在 pom 中添加必要的依赖,具体 pom 文件如下:

<?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>

  <groupId>com.sagesource</groupId>
  <artifactId>spring-cloud-eureka</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>spring-cloud-eureka</name>

  <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.BUILD-SNAPSHOT</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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>

  <repositories>
    <repository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
</project>

通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话。这一步非常简单,只需在一个普通的 Spring Boot 应用中添加这个注解就能开启此功能:

@SpringBootApplication
@EnableEurekaServer
public class ApplicationEurekaServer {

  public static void main(String[] args) {
    SpringApplication.run(ApplicationEurekaServer.class, args);
  }

}

在默认的配置下,注册中心服务端也会将自己作为一个客户端来注册自身,一般情况下,我们需要禁用这个功能,修改后的 application.yml 如下:

# spring config
spring:
 application:
  name: spring-boot-eureka

# server config
server:
 port: 9871

# eureka config
eureka:
 instance:
  hostname: localhost
 client:
  register-with-eureka: false #不向注册中心注册自己
  fetch-registry: false #不检索服务
  service-url:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

由于我们都是在本地运行,为了后续的服务区分,我们将服务注册中心的端口通过 server.port 设置运行端口为:9871
在完成上述配置后,启动应用并访问 http://localhost:9871。可以看到如下页面,其中 Instance currently registered with Eureka 的列表是空的,说明还没有服务注册到该注册中心。

我想大家都注意到上面那两行醒目的红字:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

原因:自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。
由于在单机情况下很容易出现该问题,按照网上的配置关闭掉自我保护后,Eureka 仍会报警,提示安全模式关闭,无法保证实例正确性。所以,我们暂时忽略该问题,后期集群部署时即可解决。

注册服务提供者

在完成了注册中心服务的搭建后,接下来我们可以尝试将一个既有的 Spring Boot 应用加入到Eureka 的服务治理体系中去。
我们仍然以之前的 spring-cloud-server 为例,我们只需要修改 application.yml以下配置:

# 应用名称
spring:
 application:
  name: spring-cloud-server

# eureka 注册中心位置
eureka:
 client:
  service-url:
   defaultZone: http://localhost:9871/eureka/

修改完成后,即可启动服务,这时我们在刷新 eureka 的管理页面,看到Instance currently registered with Eureka的列表信息如下:

这表明,我们的服务已经成功注册在注册中心。

相关实例代码:https://github.com/sagesource/spring-cloud-set

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • spring cloud 使用Eureka 进行服务治理方法

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能. 本文通过简单的小例子来分享下如何通过Eureka进行服务治理: 搭建服务注册中心 注册服务提供者 服务发现和消费 ==========我是华丽的分割线======================== 一.搭建服务注册中心 先列出完整目录结构: 搭建过程如下

  • Spring Cloud Eureka服务治理的实现

    什么是Spring Cloud Eureka Spring Cloud Eureka 是 Spring Cloud 中的一个组件,它是基于 Netflix Eureka 做了二次封装,主要是负责完成微服务框架中服务治理的功能.Spring Cloud通过为 Eureka 增加了 Spring Boot 风格的自动化配置,我们只需要通过简单的引用依赖和注解就能让 Spring Boot 够将的微服务应用轻松的与 Eureka 服务治理体系进行整合. 服务治理 服务治理是微服务框架中最为核心和基础的

  • spring cloud eureka 服务启动失败的原因分析及解决方法

    目录 环境: 错误log 环境: <spring-boot-version>2.3.5.RELEASE</spring-boot-version> <spring-cloud-version>Hoxton.SR8</spring-cloud-version> 错误log Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerEx

  • Spring Cloud Eureka服务注册中心入门流程分析

    目录 项目搭建 客户端注册 聚合层处理 Eureka架构 集群搭建 多区域配置 自我保护开关 心跳机制 Eureka实例信息存储 项目地址 在学习Ribbon使用的时候,我们是直接在配置文件中写死服务地址的,是不是特别的不方便?我们是不是需要一个统一的地方来维护这些服务,以及这些配置发生变化后,我们不需要重启服务. 所以这个时候需要引出一个新组件——eureka. 它主要可以帮助我们实现如下功能: 地址的统一维护服务提供者的动态上下线通知 服务提供者可以将服务注册到eureka上,eureka通

  • Spring Cloud Eureka 服务上下线监控的实现

    之前我们有介绍通过Spring Boot Admin来检测服务的上下线,然后进行通知功能. https://www.jb51.net/article/130943.htm 今天为大家介绍另外一种实现的方式,在Eureka服务中进行检测通知,Eureka中提供了事件监听的方式来支持扩展. EurekaInstanceCanceledEvent 服务下线事件 EurekaInstanceRegisteredEvent 服务注册事件 EurekaInstanceRenewedEvent 服务续约事件

  • SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    一.Spring Cloud简介 Spring Cloud是一个基千SpringBoot实现的微服务架构开发 工具.它为微服务架构中涉及的 配置管理.服务治理. 断路器. 智能路由.微代理. 控制总线. 全局锁. 决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品,还可能会新增),如下所述. Spring Cloud Config: 配置管理工具.Spring Cloud Netflix: 核心组件

  • spring cloud eureka微服务之间的调用详解

    微服务之间的调用如何实现 首先 你需要两个或以上的微服务模块 至于怎么创建可以参考我上一篇博客 spring cloud eureka注册中心 如果想在页面显示 那么需要先加上 compile 'org.springframework.boot:spring-boot-starter-thymeleaf' 这个thymeleaf依赖 springboot推荐使用thymeleaf模板 它的最大好处就是原型即是模板 后缀是html html文件 需要放在resources/templates文件夹

  • Spring cloud Eureka注册中心搭建的方法

    前提  系统安装jdk1.8及以上,配置好maven的ide(这里用idea进行演示,maven版本3.5,配置阿里云源) 项目搭建 新建一个maven项目,创建最简单的那种就好,项目名这里为EurekaServerDemo,包名什么的随意,项目打包方式为jar, 也可以使用spring官方的生成器,官方的生成器会创建基础的springboot项目结构.这里为了演示,都可以 修改pom文件,参考如下,版本推荐和本文相同,springboot和cloud版本的坑很多 <?xml version=&qu

  • Spring Cloud Eureka(全面解析) 大白话

    目录 Eureka大白话解析 1.Eureka介绍 2.Eureka的工作细节 2.1EurekaServer 2.2EurekaClient Eureka分区策略 第一步:背景和概念介绍 第二步:相关参数介绍 Eureka大白话解析 笔记补录: 1.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能. 服务治理是微服务架构中必不可少

  • SpringCloud Eureka服务治理之服务注册服务发现

    目录 什么是Eureka Eureka核心概念服务注册和服务发现 服务注册 服务发现 Eureka实战 Eureka服务端单节点构建 Eureka服务端集群构建 Eureka客户端构建 什么是Eureka Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架

  • 详解Spring Cloud Zuul 服务网关

    有了Eureka服务注册发现.Hystrix断路器.Ribbon服务调用负载均衡,以及spring cloud config 集群配置中心,似乎一个微服务框架已五脏俱全,last but not least,一个服务网关却不可或缺. Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务.Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器. Zuul介绍 在整个Spring Cloud微服务框架里,Zuul扮演着"智能网

随机推荐