• SpringCloud----(2)Eureka Server(服务治理)


    上一篇:SpringCloud-----(1)微服务基础概念

    前言

      SpringCloud微服务已经是目前互联网应用开发的一个趋势,简单来讲,其实就是将我们的一个整体的项目拆分成多个小的模块,这样使得我们的项目扩展更加灵敏。Eureka是Springcloud的服务与注册中心。作为SpringCloud的第一个组件,它的主要作用是负责SpringCloud中各个相互独立的服务之间相互调用。Eureka相当于 Zookeeper+Dubbo,服务提供者将自己提供的服务注册到注册中心,然后Eureka将注册的服务存储到一个双层结构的Map中。Eureka包含了两个组件:eureka servereureka client

      Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
      Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

      现在社区里面关于Eureka的概念知识点有很多,我简单记录一下自己在项目中使用Eureka过程。

      Eureka Server是服务注册功能的服务器,是服务注册中心。系统中的其他微服务,可以通过Eureka Client连接到注册中心并保持心跳连接,下图中的服务消费者服务提供者都是Eureka Client

    在这里插入图片描述

    创建项目

    一、创建一个 Eureka Server

    1.创建项目的时候,勾选上依赖Eureka Server在这里插入图片描述
    2.在项目的启动类上添加注解:@EnableEurekaServer,在此注解中导入了一个EurekaServerMarkerConfiguration类,此类会向spring容器中添加一个bean,添加此注解之后,eureka server将会和spring 容器一起启动。

    @SpringBootApplication
    @EnableEurekaServer
    public class ServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ServerApplication.class, args);
    	}
    }
    

    3.在application配置文件中配置eureka server注册信息。

    
    #设置项目端口
    server:
      port: 8082
    
    #设置 eureka 注册中心url
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8082/eureka/
    

    4.此时启动该项目,访问localhost:8082,可以看到可以访问eureka页面。
    在这里插入图片描述
    上图中红框内表示当前的eureka 注册中心注册了哪些服务,从后面箭头所指的端口中可以看出,8082端口就是我们在配置文件中本项目的端口,也就是说,eureka注册中心将自己也注册上了。可以在配置文件中进行如下设置:

    #设置 eureka 注册中心url
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8082/eureka/
          #不将自己注册到 eureka server
        register-with-eureka: false
    

    重启项目之后,重新访问localhost:8082
    在这里插入图片描述
    说明现在eureka server上面没有注册服务。

    二、创建一个 Eureka Client

    1.添加依赖
    在这里插入图片描述
    2.在启动类applicaiton中添加注解:@EnableDiscoveryClient,此注解的作用与上文中的@EnableEurekaServer类似。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ClientApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ClientApplication.class, args);
    	}
    }
    

    3.在properties配置文件中配置注册url

    #设置项目的端口号
    server:
      port: 8083
    
    #设置要注册的url(也就是 eureka server的url地址)
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8082/eureka/
    
    

    4.启动client项目,再访问:localhost:8082
    在这里插入图片描述
    发现端口为8083的client成功注册到eureka了。但是该注册的服务名称为UNKNOWN,这里我们可以再client项目的properties配置文件中设置服务的名称,整体配置如下:

    #设置项目的端口号
    server:
      port: 8083
    
    #设置要注册的url
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8082/eureka/
          
    #设置应用的名称      
    spring:
      application:
        name: eurekaClient
    

    重启项目,再访问localhost:8082页面:
    在这里插入图片描述
    这样就可以看到注册的应用名称变成了client
      在eureka的控制台页面,有时候可能会出现下面的红字提示,

    在这里插入图片描述
    遇到这种情况先不要慌,这是eureka的自我保护机制给予的提示,Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期(什么意思?就是Eureka Server在短时间内失去过多的客户端的时候,Eureka就会进入自我保护模式,将注册的服务信息全都保护起来,不再被删除。直到客户端重新连接注册上Eureka Server后,自我保护模式退出),但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
      清楚了根本原因之后,只需要在eureka server项目的配置文件中做如下配置:

    
    #设置项目端口
    server:
      port: 8082
    
    
    
    #设置 eureka 注册中心url
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8082/eureka/
          #不将自己注册到 eureka server
        register-with-eureka: false
    
        #关闭eureka server自我保护机制(开发环境可以关闭,但是生产环境不建议关闭)
      server:
        enable-self-preservation: false
    
    

    关闭eureka server的自我保护机制,上述问题就解决了,但是注意:在开发环境中我们可以关闭自我保护机制,但是在项目的生产环境中,不建议将它关闭。

    有关于eureka 的配置可以参考一下:eureka 常用配置
      到这里基本上eureka server项目和eureka client项目就注册完成了。其实主要就是启动类上添加注解,再到配置文件中进行一系列配置就Ok了

    下一篇:SpringCloud—(3)实现Eureka的高可用

  • 相关阅读:
    高并发 内核优化
    mysql 读写分离
    Jmeter使用入门
    Jenkins+Jmeter+Ant接口持续集成
    Android客户端稳定性测试——Monkey
    SVN客户端项目递归删除.svn目录
    Windows 下 php5+apache+mysql5 手工搭建笔记
    熟悉常用的Linux操作
    C语言文法
    词法分析实验报告
  • 原文地址:https://www.cnblogs.com/wgty/p/12810471.html
Copyright © 2020-2023  润新知