SpringCloud学习之注册中心Eureka

  Eureka服务注册中心是netflix开源组织提供的一个服务高可用的解决方案,是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。

1. 搭建Eureka

使用idea工具直接创建一个新的SpringBoot项目,在选择依赖的界面勾选Cloud Discovert -> Eureka Server依赖,创建完成后的pom.xml配置文件内容如下:

...//省略部分
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--SpringCloud最新稳定版本-->
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

    <dependencies>

        <!--Netflix Eureka依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
    
    <!--SpringCloud依赖版本管理-->
    <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>
...//省略部分
    我们在创建新的项目时,如果选择了相关SpringCloud的依赖,则会自动在pom.xml配置文件内添加SpringCloud最新稳定版本依赖配置。
spring-cloud-dependencies这个依赖是SpringCloud内所需要依赖的版本维护,在maven项目内如果被<dependencyManagement>内修饰的<dependency>,子项目或者本项目在使用时可以不用设置版本号,默认使用<dependencyManagement><dependency>内设置的版本信息。
正因如此,这也是为什么我们添加了spring-cloud-dependencies依赖后,在使用相关SpringCloud插件时可以不用添加version标签设置导入指定版本的依赖。

2. Eureka Server的配置

    添加spring-cloud-starter-netflix-eureka-server依赖后,我们就来看看怎么开启Eureka Server服务。开启Eureka的注册中心服务端比较简单,只需要修改注意两个地方。

  • 第一个地方是在入口类上添加启用Eureka Server的注解@EnableEurekaServer,如下所示:
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaApplication {
    // main method
}
  • 第二个地方是application.yml/application.properties文件内添加配置基本信息,如下所示:
# 服务名称
spring:
  application:
    name: hengboy-spring-cloud-eureka
# 服务端口号
server:
  port: 9090

#Eureka 相关配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/
    # 是否从其他的服务中心同步服务列表
    fetch-registry: false
    # 是否把自己作为服务注册到其他服务注册中心
    register-with-eureka: false
  #设为false,关闭自我保护
  server.enable-self-preservation=false
  #清理间隔(单位毫秒,默认是60*1000)
  server.eviction-interval-timer-in-ms=10000
 
  • spring.application.name:服务名称
  • server.port:服务端口号
  • eureka.client.service-url.defaultZone:Eureka默认的服务地址空间信息配置
  • eureka.client.fetch-registry:是否从其他Eureka注册中心同步服务列表(单节点无需配置启用).
  • eureka.client.register-with-eureka:是否将自己作为服务注册到其他Eureka服务注册中心(单节点无需配置启用).

3. 运行测试

      上面的步骤我们已经把Eureka服务端所需要的依赖以及配置进行了集成,接下来我们来运行测试看下效果,Eureka给我们提供了一个漂亮的管理界面,这样我们就可以通过管理界面来查看注册的服务列表以及服务状态等信息。

测试步骤:

  1. 通过Application方式进行启动Eureka Server
  2. 在本地浏览器访问http://localhost:10000,10000端口号是我们在application.yml配置文件内设置的server.port的值。
  3. 成功访问到Eureka Server管理界面,界面如下所示:
 
Eureka Server 管理界面

对于界面我们可以看到一些Eureka Server的健康数据以及基本信息,比如:

  • server-uptime:已经启动的耗时
  • current-memory-usage:当前占用的内存总量
  • Instances currently registered with Eureka:注册到该中心的服务列表
  • ipAddr:当前Eureka Server的IP地址,如果没有配置eureka.instance.ip-address那么这里使用默认的IP地址。
    ...

4. Eureka-Client

服务发现,可以新建一个springboot项目,maven中引入相关jar
     <!-- eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

配置文件加入注册中心的地址,也就是Eureka-Server的配置文件里面 eureka.client.serviceUrl.defaultZone

#eureka
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

启动类添加注解

@EnableEurekaClient
@SpringBootApplication
@RestController
public class MyspringbootApplication{

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

    /**
     * 访问首页
     */
    @GetMapping("/index")
    public String index(){
        return "hello springboot!";
    }

}

成功在注册中心注册成功,可以对外提供服务

5. 健康检查

  默认情况下,Eureka使用客户端心跳来确定客户端是否启动。除非另有说明,否则发现客户机不会根据Spring引导执行器传播应用程序的当前健康检查状态。因此,在成功注册后,Eureka总是宣布应用程序处于“UP”状态。可以通过启用Eureka健康检查来更改此行为,比如我现在将springboot服务停掉,但注册中心依旧显示为UP,这样就会造成我服务已经挂掉了,但注册中心依然会认为这个实例还活着。

#健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(单位秒,默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=10
# 续约到期时间(单位秒,默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=10

maven中添加依赖

        <!-- actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

健康检查,注册中心将死去的服务剔除

 

posted @ 2020-02-05 14:38  天~宇~翱~翔  阅读(292)  评论(0编辑  收藏  举报