美文网首页
搭建注册中心Eureka

搭建注册中心Eureka

作者: 你值得拥有更好的12138 | 来源:发表于2019-06-20 11:02 被阅读0次

    以下概念性的语言均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
    Github源码参考:https://github.com/HanJuly/SpringCloudDemo

    微服务概念

    • 在传统的单体系统中,我们以分包(或者其他的方式)划分不同的业务模块以保证高可维护性。当我们的系统越来越复杂的时候,会出现很多重复,交叉的业务。刚开始我们还是能接受的这样维护成本,但是当这些模块的交叉越来越多,越来越复杂的时候,我们就需要重构系统。

    • 这时候就需要,将系统重新分块,提取重复的功能,梳理模块之间的耦合关系,使用Restful的方式进行通信减少模块之间的耦合。这时候微服务就是最好不过得架构模式了

    • 从团队的管理角度看,当系统的业务复杂的时候,不仅是代码之间的耦合度增加,而且项目团队之间的也会出现大量复杂的交集。

    • 微服务具有的每一个服务可以独立运行,且它们之间通过RPC(远程程序调用)通信(Eureka是Http协议,Dubbo是使用Netty自定义的Dubbo协议)。它们可以部署在一台机器上也可以不同的机器。

    Eureka是什么?

    Eureka是一个分布式微服务的注册中心,保存一些微服务之间的信息。它是一个基于Restful的服务,包括客服端和服务端两个jar包。实现服务注册,负载均衡,故障转移等功能。

    为什么要使用Eureka

    • 它就类似于网络结构中的路由表,保存了微服务名与服务ip的的表。这些表如果给每一个微服务自己去维护那就太浪费资源了。
    • Eureka的client包可以实现负载均衡的功能让请求的调用让服务器压力均衡。

    怎么使用

    环境:

    idea 2019 Maven -3.5.0 基于SpringBoot
    基于SpringCloud Finchley.RELEASE

    1.创建一个Maven工程,并在pom.xml中加入依赖
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.9.RELEASE</version>
    </parent>
    
     <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        <version>2.1.0.RELEASE</version>
     </dependency>
    
      <dependencyManagement>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    重要的事情:以上的springboot版本与springcloud的版本是配套的,修改会导致出现异常不能启动。需要查看版本对应请到官网查看。

    基本的web包也是需要加入的!

    2.在yaml中配置
    info:
      artifact: register-center
      name: '@project.name@' #获取pom.xml文件中的属性
      description: '@project.description@'
      version: '@project.version@'
      spring-boot-version: '@spring.boot.version@'
      spring-cloud-version: '@spring.cloud.version@'
    
    
    server:
      port: ${dev.eureka.server.port}  #端口
    spring:
      profiles: dev
    
    
    eureka:
      server:
        enable-self-preservation: false  # 关闭自我保护 
      client:
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${dev.eureka.server.port}/eureka/ #注册中心地址
        registerWithEureka: false  # 单机模式 设置为false
        fetchRegistry: false       # 单机模式 设置为false
      instance:
        hostname: ${dev.eureka.hostname}    # 指定该Eureka实例的主机名
    
    注释解释:
    关闭自我保护

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

    我们在单机测试的时候很容易满足心跳失败比例在 15 分钟之内低于 85%,这个时候就会触发 Eureka 的保护机制,一旦开启了保护机制,则服务注册中心维护的服务实例就不是那么准确了,此时我们可以使用eureka.server.enable-self-preservation=false来关闭保护机制,这样可以确保注册中心中不可用的实例被及时的剔除

    单机模式 设置为false

    这两个属性的作用是,在出现两个以上的服务注册中心时,需要把注册中心视为一般的服务管理,需要它们互相注册,互相获取彼此的的“路由表”。保证注册中心的高可用性,单机情况就不需要了。

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

    把它视为一个web工程启动后,浏览器进入http://127.0.0.1:8500(取决你的配置)

    image.png
    其他都是一些本机的信息,还可以使用xml的方式查看:http://127.0.0.1:8500/eureka/apps image.png

    至此注册中心就搭建完成,那么我们怎么注册我们服务呢?下一篇文章

    相关文章

      网友评论

          本文标题:搭建注册中心Eureka

          本文链接:https://www.haomeiwen.com/subject/fxzrqctx.html