zoukankan      html  css  js  c++  java
  • SpringCloud 系列之 eureka

    简介

    关于 eureka 首先我们去官网去看一下相关的描述:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
    eureka 在微服务中的主要作用是服务发现,我们可以把一个服务(项目)注册到eureka中,这样,这个服务就可以被其它服务发现,当然微服务不止是一个服务这么简单,一个微服务架构项目的顺利运行,需要很多不同功能的微服务去共同去实现。
    当一个服务可以被发现了以后,我们可以获取这个服务,然后去调用这个服务,在调用服务的时候,如果一个服务是由多个相同的项目提供,当一个请求到来的时候,我们到底是要哪个项目来接收请求去处理呢?这个时候我们又涉及到负载均衡的问题...本文的主要内容还只是eureka的使用和eureka在微服务中担任的服务发现角色去写的。

    使用

    使用说明

    eureka既然是注册中心,那就有服务端和客户端,所谓服务端,就是记录服务信息,比如一个人想要卖东西,那么他必须去淘宝这类的软件去注册一个店铺,然后其它人如果需要买东西就可以登陆淘宝去找这个东西。他的店铺相当于客户端。淘宝就是服务端。
    以下案例解释:
    springcloud-eureka-server :eureka的服务端
    springcloud-eureka-client-a:eureka的客户端A
    springcloud-eureka-client-b:eureka的客户端B
    A,B两个项目注册到eureka的服务端,这样服务端就可以看到A,B两个项目的信息了,eureka的功能也就是实现了,至于项目和项目之间的调用就要哦使用服务调用了,已经不属于eureka的范畴了。

    eureka 服务中心-服务端

    新建Spring Boot项目springcloud-eureka-server,pom文件加入依赖:

     <dependencies>
            <!-- eureka-server -->
            <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-web</artifactId>
            </dependency>
     </dependencies>
    

    配置文件application.yml

    server:
      port: 2222
    
    eureka:
      instance:
        hostname: localhost  #eureka服务端的实例名称
      client:
        #false表示不向注册中心注册自己(想注册也可以,不过没必要)
        register-with-eureka: false
        #false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
        fetch-registry: false
        service-url:
          #设置与eurekaServer交互的地址查询服务和注册服务都需要依赖这个地址
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

    启动类上添加注解:

    @EnableEurekaServer

    eureka 服务中心-客户端-单机版

    新建Spring Boot项目springcloud-eureka-client-a,pom文件加入依赖:

     <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     </dependencies>
    

    配置文件application.yml

    server:
      port: 3333
    
    eureka:
      client:
        #true表示向注册中心注册自己,默认为true
        register-with-eureka: true
        #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:2222/eureka
    spring:
      application:
        name: springcloud-client-a
    

    启动类上添加注解

    @EnableEurekaClient

    仿照springcloud-client-a 项目新建springcloud-client-b ,然后只需要把application.yml 文件的端口号3333改为4444就可以了
    依次启动 springcloud-eureka-server,springcloud-client-a,springcloud-client-b
    访问:http://localhost:2222/
    页面展示如下:

    红色框中,我们可以看到,springcloud-client-a 和 springcloud-client-b 已经展示在服务列表中了,eureka的作用也就完成了。

    eureka服务集群

    这个集群其实,有注册中心的服务端集群和客户端的集群,服务端集群就是多个springcloud-eureka-server(多个淘宝,拼多多,蘑菇街...),配置的时候,淘宝的配置文件appliaction.yml的defaultZone属性要写拼多多和蘑菇街的地址,(相互守望,互相注册的意思)
    客户端集群的配置,两个提供相同服务的项目,在配置文件application.yml写相同的spring.application.name就可以了(在淘宝,两个人注册相同名称的店名)

    项目地址

    关于项目的地址,有兴趣的可以自行下载
    git@gitee.com:anxc/study-demo-eureka.git

    eureka 自我保护

    说到自我保护就不得不说心跳机制了,其实就是间隔一定的时间去相互发送请求告知对方我还活着的意思,当启动了自我保护(默认是自动启动的)以后,如果一个服务突然宕机了,那么eureka的注册中心不会立即删掉这个服务的信息,而是把它保护起来,等到它再次启动以后,把它的退出保护状态。这里其实涉及到了著名的CAP理论。
    eureka.server.enable-self-preservation设为false 则关闭eureka的自我保护机制

    参考文章

    https://segmentfault.com/a/1190000022576370
    https://blog.csdn.net/wangmx1993328/article/details/88074605
    https://www.cnblogs.com/xishuai/p/spring-cloud-eureka-safe.html

  • 相关阅读:
    C# 实现复杂对象的序列化与反序列化
    C#操纵XML文档(主要是应用程序的配置文件)
    滕王阁序——王 勃 (注:我至爱的一篇文章)
    SmartClient(智能客户端)学习笔记之——Smart Client基本学习资源
    listview按列自动排序的一点补充
    (转)SmartClient(智能客户端)学习笔记之——Microsoft Updater Application Block ApplicationUpdater assembly设计
    用超图实现城市给水的爆管分析
    .net2005中对asp.net中GridView的常用操作
    .net2003中对DataGrid的常用操作
    为DataGrid或者GridView或者DataList最前面增加一排序号
  • 原文地址:https://www.cnblogs.com/Anxc/p/14106303.html
Copyright © 2011-2022 走看看