SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建

服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心。

注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地。之后服务会被30s(可配置)发送一个心跳信息,续约服务。

如果服务治理中心在90s内没有收到一个服务的续约,就会认为服务已经挂了,会把服务注册信息删掉。

服务停止前,服务会主动发送一个停止请求,服务治理中心会删除这个服务的信息。

如果Eureka Server收到的心跳包不足正常值的85%(可配置)就会进入自我保护模式,在这种模式下,Eureka Server不会删除任何服务信息。

Eureka架构图

  • Registery:表示服务向注册中心注册。
  • Renew:表示服务向注册中心发送心跳,表示该服务还活着,注册中心不能删除改服务。
  • Cancel:表示注册中心能删除该服务。
  • Get Registery:表示该服务重新注册。
  • Replicate:表示注册中心之间相互注册。
  • Remote Call:表示远程调用。
  • Renew:表示服务向注册中心发送心跳,表示该服务还活着,注册中心不能删除改服务。

    Get Registery:表示该服务重新注册。

    Remote Call:表示远程调用。

    搭建Eureka环境

    (1) 创建SpringBoot项目

    (2) 删除多余的目录(src等目录,因为创建maven的聚合工程需要)只剩下pom文件,名字叫做eureka-father作为聚合工程的父级工程,如图

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd"
        !--基本信息--
        descriptionSpringBoot-Eureka环境搭建多模块构建示例/description
        modelVersion4.0.0/modelVersion
        nameeureka-father/name
        packagingpom/packaging
    
        !-- 项目说明:这里作为聚合工程的父工程 --
        groupIdcom.org.ldc/groupId
        artifactIdeureka-father/artifactId
        version1.0.0.RELEASE/version
    
        !-- 继承说明:这里继承SpringBoot提供的父工程 --
        parent
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-parent/artifactId
            version2.0.2.RELEASE/version
        /parent
        !-- 表示子模块 --
        modules
            moduleeureka3000/module
        /modules
        !-- 子模块的依赖 --
        dependencyManagement
            dependencies
                dependency
                    groupIdcom.org.ldc/groupId
                    artifactIdeureka3000/artifactId
                    version0.0.1-SNAPSHOT/version
                /dependency
            /dependencies
        /dependencyManagement
    /project
    

    (3) 创建子模块eureka3000,方法如图所示

    子模块的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"
        modelVersion4.0.0/modelVersion
        groupIdcom.org.ldc/groupId
        artifactIdeureka3000/artifactId
        version0.0.1-SNAPSHOT/version
        nameeureka3000/name
        descriptionDemo project for Spring Boot/description
    
        properties
            java.version1.8/java.version
        /properties
    
        !-- 继承本项目的父工程 --
        parent
            groupIdcom.org.ldc/groupId
            artifactIdeureka-father/artifactId
            version1.0.0.RELEASE/version
        /parent
    
        !--引入eurekaserver  依赖--
        dependencies
            dependency
                groupIdorg.springframework.cloud/groupId
                artifactIdspring-cloud-starter-netflix-eureka-server/artifactId
            /dependency
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-web/artifactId
            /dependency
        /dependencies
    
        dependencyManagement
            dependencies
                dependency
                    groupIdorg.springframework.cloud/groupId
                    artifactIdspring-cloud-dependencies/artifactId
                    versionFinchley.SR2/version
                    typepom/type
                    scopeimport/scope
                /dependency
            /dependencies
        /dependencyManagement
    
        build
            plugins
                plugin
                    groupIdorg.springframework.boot/groupId
                    artifactIdspring-boot-maven-plugin/artifactId
                /plugin
            /plugins
        /build
    
    /project
    

    子模块的启动类如下,这里需要注意的就是要在类上加上@EnableEurekaServer注解。

    
    package com.org.ldc.eureka3000;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class Eureka3000Application {
        public static void main(String[] args) {
            SpringApplication.run(Eureka3000Application.class, args);
        }
    }
    

    子模块的application.properties文件的内容如下:

    
    server:
      port: 3000
    eureka:
      server:
        enable-self-preservation: false  #关闭自我保护机制
        eviction-interval-timer-in-ms: 4000 #设置清理间隔(单位:毫秒 默认是60*1000)
      instance:
        hostname: localhost
      client:
        registerWithEureka: false #不把自己作为一个客户端注册到自己身上
        fetchRegistry: false  #不需要从服务端获取注册信息(因为在这里自己就是服务端,而且已经禁用自己注册了)
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
    

    以上创建的表示一个eureka节点,启动子模块的启动类,然后浏览器访问http://localhost:3000,就会出现如下页面,红色框内一开始是没有内容的,因为我这是搭建的有三个节点eureka和有注册服务的服务工程,所以红色框内会出现内容,所以搭建不要纠结这个,只要出现这个界面,就说明eureka环境搭建好了,但是使单节点的,不是集群的

    (4) 接着创建服务模块,创建过程和创建子模块一样,不再赘述,名字叫做user5000,如图eureka3001、eureka3001是我创建的另外的两个注册中心节点

    服务模块的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"
        modelVersion4.0.0/modelVersion
        groupIdcom.org.ldc/groupId
        artifactIduser5000/artifactId
        version0.0.1-SNAPSHOT/version
        nameuser5000/name
        descriptionDemo project for Spring Boot/description
    
        properties
            java.version1.8/java.version
        /properties
    
        !-- 继承本项目的父工程 --
        parent
            groupIdcom.org.ldc/groupId
            artifactIdeureka-father/artifactId
            version1.0.0.RELEASE/version
        /parent
    
        dependencies
            dependency
                groupIdorg.springframework.cloud/groupId
                artifactIdspring-cloud-starter-netflix-eureka-client/artifactId
            /dependency
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-web/artifactId
            /dependency
        /dependencies
        dependencyManagement
            dependencies
                dependency
                    groupIdorg.springframework.cloud/groupId
                    artifactIdspring-cloud-dependencies/artifactId
                    versionFinchley.SR2/version
                    typepom/type
                    scopeimport/scope
                /dependency
            /dependencies
        /dependencyManagement
        build
            plugins
                plugin
                    groupIdorg.springframework.boot/groupId
                    artifactIdspring-boot-maven-plugin/artifactId
                /plugin
            /plugins
        /build
    
    /project
    

    application.yml文件内容如下:

    
    server:
      port: 5000
    eureka:
      client:
        serviceUrl:
            defaultZone: http://localhost:3000/eureka/  #eureka服务端提供的注册地址 参考服务端配置的这个路径
      instance:
        instance-id: user-1 #此实例注册到eureka服务端的唯一的实例ID 
        prefer-ip-address: true #是否显示IP地址
        leaseRenewalIntervalInSeconds: 10 #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30(与下面配置的单位都是秒)
        leaseExpirationDurationInSeconds: 30 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒
    spring:
      application:
        name: server-user #此实例注册到eureka服务端的name 
    

    启动类如下:需要加上@EnableEurekaClient 注解

    
    package com.org.ldc.user5000;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient //开启eureka客户端
    public class User5000Application {
        public static void main(String[] args) {
            SpringApplication.run(User5000Application.class, args);
        }
    
    }
    

    (4) 最后测试先启动注册中心的启动类,然后启动服务模块的启动类,最后访问localhost:3000出现如下图说明搭建成功。

    END

    Java面试题专栏

    SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建

    欢迎长按下图关注公众号后端技术精选

    SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建

    原文始发于微信公众号(后端技术精选):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建


     上一篇
    深入理解 SpringBoot 启动机制——starter 机制 深入理解 SpringBoot 启动机制——starter 机制
    点击上方“后端技术精选”,选择“置顶公众号” 技术文章第一时间送达! 作者:MyBug juejin.im/post/5d25b7115188256cd02a00ad 一、前言使用过springboot的同学应该已经知道,s
    下一篇 
    SpringBoot 项目构建 Docker 镜像调优实践 SpringBoot 项目构建 Docker 镜像调优实践
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推