`
哈哈哈558
  • 浏览: 14610 次
社区版块
存档分类
最新评论

SpringCloud:注册中心Eureka

 
阅读更多

 

Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。

注册中心的意义

注册中心

管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。

有了注册中心,调用关系的变化,画几个简图来看一下。

服务A调用服务B

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

有了注册中心之后,任何一个服务都不在是直连的,都需要通过注册中心去调用。

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

如果是一个连续调用:

服务A调用服务B,服务B调用服务C

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

这里如果加上注册中心,整个调用流程就会分为两步,服务A先从注册中心请求服务B,服务B再从注册中心请求服务C

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

上面的示例只是描述了两三个服务之间的互相调用,可能加上注册中心还会稍显繁琐,如果一条调用链上面有几十个服务(这个丝毫不是开玩笑哦,正常的业务流程中很可能出现这种复杂的调用过程),在工作中我就遇到过超过20个服务的互相调用,这种复杂业务场景的互相调用,如果不使用注册中心,画出来的图会连成一个网状结构,单从图上面已经很难找出服务的上下游关系了。其中如果一个服务有改动,就会牵扯到上下游多台机器的重启,整个架构设计完全耦合在一起,每次改动所需要的工作量完全超出想象。通过注册中心去注册服务,完全不在需要关心上下游机器的ip地址,由几台服务器组成,是否重启才会生效,注册中心已经帮我们把服务的注册和发现做好了,我们只需要知道注册中心在哪里,对应的服务名是什么就ok啦~~

由于各种服务都注册到了服务中心,就有了去做很多高级功能条件。比如几台服务提供相同服务来做均衡负载;监控服务器调用成功率来做熔断,移除服务列表中的故障点;监控服务调用时间来对不同的服务器设置不同的权重等等。

Netflix的前世今生

在说Eureka之前我们先了解一下Netflix这家公司:

以下介绍来自于百度百科:

Netflix(Nasdaq NFLX) 成立于1997年,是一家在线影片租赁提供商,主要提供Netflix超大数量的DVD并免费递送,总部位于美国加利福尼亚州洛斯盖图。

Netflix已经连续五次被评为顾客最满意的网站。可以通过PC、TV及iPad、iPhone收看电影、电视节目,可通过Wii,Xbox360,PS3等设备连接TV。Netflix大奖赛从2006年10月份开始,Netflix公开了大约1亿个1-5的匿名影片评级,数据集仅包含了影片名称。评价星级和评级日期,没有任何文本评价的内容。比赛要求参赛者预测Netflix的客户分别喜欢什么影片,要把预测的效率提高10%以上。

总而言之,这是一家全球最大的(可能要排除国内的,具体不清楚)流媒体公司,最开始见这个单子是在各种美剧或者电影的开头,顺手百度了一下,Netflix拍摄的代表性的美剧有《纸牌屋》、《毒枭》、《怪奇物语》。springcloud的微服务就是基于Netflix这家公司的开源产品来做的。

Netflix的开源框架组件已经在Netflix的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Spring Cloud开源产品,主要是基于对Netflix开源组件的进一步封装,方便Spring开发人员构建微服务基础框架。对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴Netflix的开源微服务组件(或Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。

Eureka

按照官方介绍:

Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.

Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

用官方的一张图来认识一下:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

上图简要描述了Eureka的基本架构,由3个角色组成:

1、Eureka Server

  • 提供服务注册和发现
    2、Service Provider
  • 服务提供方
  • 将自身服务注册到Eureka,从而使服务消费方能够找到
    3、Service Consumer
  • 服务消费方
  • 从Eureka获取注册服务列表,从而能够消费服务

案例实践

终于到了重头戏,开始撸代码~~~

Eureka Server

关于创建springcloud项目,目前有两种比较方便的方案,核心都是一样的,大家自行选择自己使用方便的。

方式一:

打开spring的官方链接:

https://start.spring.io/

在Group中填入自己的组织,一般填写公司的域名的到写,例如com.jd或者com
.baidu,这里我直接写com.springcloud。

在Artifact中填写工程的名称,这里我直接写Eureka。

package选择jar,java选择8,至此,基础选择已经全都选完,接下来要开始选择我们使用的springcloud的组件了,也就是重头——Eureka组件。

在Dependencies中找到Spring Cloud Discovery,选择Eureka Serve,结果如下图:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

最后点击下方的绿色长条按钮 Generate the project 进行下载,等待下载完成后,直接将压缩包解压导入我们的编辑工具idea里即可。

方式二:

基于idea创建,打开idea,首先file->new->project,选中spring Initializr,这时可以看到右侧让我们选择一个初始化的服务url,默认的就是上面的官方链接,https://start.spring.io/

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

点击next下一步,填写和上面一样的Group、Artifact、java版本、package方式等信息,继续next下一步,选择依赖,和前面的方法的一样,在Dependencies中找到Spring Cloud Discovery,选择Eureka Serve,点击next,选择项目名称和存储路径,点击finish,静静等一会,第一个项目Eureka就新鲜出炉了~~~

我一般选择第一种方式创建springcloud项目,这种方式不依赖IDE工具。

pom.xml

maven项目,首先看一下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.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>Eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>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>
COPY
  • parent: 父级依赖项目,这里能看到依赖的父级的springboot的版本是2.1.6.RELEASE。
  • properties: 当前配置文件一些配置,可以看到Java的版本是1.8,springcloud的版本是Greenwich.SR1。
  • dependencies: 当前项目依赖的组件,这里能看出来依赖两个组件,一个是Eureka,还有一个是test测试框架。
  • *dependencyManagement: 这里是声明依赖,并不实现引入,如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
  • build: 在build中声明了当前使用的插件,spring-boot-maven-plugin,主要功能:能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。

配置

默认的配置文件是在resource下面的application.properties,在springboot的项目中,目前支持两种配置文件的形式,还有一种是yaml,我这里使用的所有配置全为yaml形式。

server:
  port: 8761
spring:
  application:
    name: eureka-serve
eureka:
  server:
    enable-self-preservation: false
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://localhost:8761/eureka/COPY
  • enable-self-preservation: 防止由于Eureka的机制导致Client被错误显示在线,仅在开发环境使用,生产环境需缓存此信息,防止因网络波动导致服务频繁上下线。
  • register-with-eureka: 不像注册中心注册自己
  • register-with-eureka: 此eureka server的应用注册地址

启动EurekaApplication.java

package com.springcloud.Eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}COPY

增加注解@EnableEurekaServer,在这个main函数上,直接右键debug就可以启动了,启动成功如下图所示:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

现在单机的注册中心已经成功启动, 引申出来一个问题,注册中心是所有的服务提供者注册服务的地方,如果只有一台机器,一旦因为某些原因,引发宕机,会造成整体服务不可用,所以,这种中心服务在生产环境必须是集群化部署,如果对高可用、容灾和备份有更高的要求,还可以分机房部署,分地区部署。

高可用集群

双机部署

增加idea启动配置,点击右上角的Edit Configurations,如下图:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

在打开的窗口中新建一个springboot的启动方式,命名为Eureka1,增加启动参数Program arguments:–server.port=8080,点击apply保存,如下图:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

使用新创建的启动配置启动服务,现在可以看到正常启动。接下来就是修改配置文件,使两个独立的服务变为集群。

server:
  port: 8761
spring:
  application:
    name: eureka-serve
eureka:
  server:
    enable-self-preservation: false
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8080/eureka/COPY

只需要在defaultZone上新增一个地址我们新服务的地址http://localhost:8080/eureka/,即可由单机立马变成双机。

现在分别使用两个启动配置启动Eureka,可以看到如下图所示:

 

SpringCloud系列教程 | 第二篇:注册中心Eureka
 

 

红框中的内容表示我们现在已经有两个eureka服务了。

上面讲了双机的配置方案,同理,多机的配置就是在defaultZone后面增加其他机器的服务地址。

分享到:
评论

相关推荐

    springcloud+注册中心eureka+配置中心demo

    在SpringCloud框架中,Eureka是作为服务发现和注册中心的核心组件,而配置中心则用于集中管理和分发应用的配置,使得微服务架构中的各个服务能够动态地获取和更新配置。下面将详细介绍这两个核心概念以及如何在一个...

    spring cloud eureka(免费下载)

    - 添加必要的依赖,包括`spring-cloud-starter-netflix-eureka-server`,这是Eureka服务注册中心的核心依赖,以及`spring-boot-starter-test`用于测试。 - 在`pom.xml`文件中,设置`spring-cloud.version`属性为`...

    spring cloud eureka 注册中心客户端

    Spring Cloud Eureka是Netflix开发的服务发现组件,它在微服务架构中扮演着核心角色,用于管理服务实例的注册与发现。Eureka客户端是Eureka生态系统的一部分,它允许微服务应用注册到Eureka服务器并获取其他服务的...

    SpringCloud基于Nacos和Eureka 实现双注册双订阅模式,可用于将注册中心Eureka平滑过渡到Nacos的解决

    大概在去年的时候发现生产环境使用eureka经常会发现服务假死eureka没有给踢掉的情况,然后就衍生了要不就换个注册中心试试,然后就了解到了nacos,正好他还融合了配置中心,但是后来碍于切换时怕生产环境不稳定,丢...

    springcloud注册中心Eureka集群示例代码.zip

    服务提供者(如 springcloud-member 和 springcloud-order)向 Eureka 注册自己的服务,而服务消费者则可以通过 Eureka 获取到可用的服务实例列表进行调用。 1. **Eureka 集群搭建**: 在这个示例中,我们有 `...

    springcloud eureka服务注册中心 最新版本2.x.x

    SpringCloud Eureka是微服务架构中的关键组件,它作为一个服务注册与发现的工具,使得服务之间的调用变得简单。在最新版本2.x.x中,Eureka提供了更稳定、高效的特性来支持大规模分布式系统的构建。 首先,让我们...

    spring-cloud 注册中心eureka服务搭建

    在Spring Cloud生态系统中,Eureka是作为服务发现和注册中心的核心组件。Eureka的主要功能是维护服务提供者(Provider)和服务消费者(Consumer)的元数据信息,使得微服务架构中的服务能够互相找到并进行通信。下面...

    spring-cloud+注册中心eureka+配置中心demo

    spring-cloud+注册中心eureka+配置中心demo的简单demo。先启动注册中心和配置中心,最后再起service。访问地址http://localhost:3011/test/getStr。可以输出在配置中心读取到的配置。注册中心地址...

    springcloud+注册中心eureka+配置中心demo.rar

    总结起来,这个项目展示了如何利用SpringCloud的Eureka和Config组件构建一个具有服务注册、服务发现和集中配置能力的微服务系统。通过这种方式,开发者可以更轻松地管理和维护复杂的分布式环境,提高系统的稳定性和...

    微服务springcloud:eureka整合gateway、RestTemplate和FeignClient

    1. 配置Eureka:在每个微服务中引入Eureka Client依赖,配置Eureka Server的地址,确保微服务启动时能成功注册到Eureka Server。 2. 配置Gateway:在Gateway项目中,引入Eureka和Spring Cloud Gateway的相关依赖,...

    springcloud-Netflix-eureka demo 可做参考

    本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础服务框架,旨在帮助开发者理解和学习如何使用Eureka进行服务注册与发现,以及Ribbon客户端负载均衡。 首先,我们来看Eureka。Eureka是...

    springcloud eureka 服务注册中心

    **SpringCloud Eureka 服务注册中心** 在微服务架构中,服务发现是核心组件之一,它使得服务之间能够互相找到并进行通信。Spring Cloud Eureka 就是这样的一个服务注册与发现工具,它是 Netflix 提供的开源项目,是...

    springcloud-eureka-server.zip

    在分布式微服务架构中,服务治理扮演着至关重要的角色,而SpringCloud Eureka Server正是这样一款专为解决服务注册与发现问题而设计的组件。本文将围绕"springcloud-eureka-server.zip"这个项目,深入探讨Spring...

    springcloud全家桶(eureka+ribbon+feign+hystrix+turbine)

    spring cloud eureka,服务注册和服务发现 spring cloud config,动态配置项 ribbon,客户端负载均衡 feign, hystrix,熔断 turbine Spring Cloud Starters 同一个服务中的多数据库支持(AOP) 全链路traceId追踪 ...

    01Spring Cloud Eureka:服务注册与发现1

    在配置文件application.yml中添加Eureka注册中心的配置,然后使用IDEA的Run Dashboard来运行SpringCloud应用。 在微服务项目中,我们可以使用IDEA的Run Dashboard来启动多个服务,以便于管理。为了让服务注册到...

    springCloud项目-内含eureka注册中心和一个服务

    在服务提供者(icodepai)中,我们需要引入Spring Cloud的Eureka客户端依赖,配置Eureka Server的地址,并通过`@EnableEurekaClient`注解开启服务注册和发现功能。服务提供者在启动时会自动向Eureka Server注册,并且...

    springCloud+eureka

    综上所述,"springCloud+eureka" 主要是利用 Spring Cloud 的 Eureka 模块构建微服务架构,实现服务的注册与发现,从而简化了分布式系统中的服务治理。通过启动 Eureka Server 和两个客户端,可以演示服务间的通信和...

    spring cloud eureka示例代码

    这通常涉及设置`spring.cloud.netflix.eureka.client.register-with-eureka=true`和`spring.cloud.netflix.eureka.client.fetch-registry=true`,这样服务就会自动注册到Eureka Server,并定期获取服务列表。...

Global site tag (gtag.js) - Google Analytics