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
给我们提供了一个漂亮的管理界面
,这样我们就可以通过管理界面
来查看注册的服务列表
以及服务状态
等信息。
测试步骤:
- 通过
Application
方式进行启动Eureka Server
- 在本地浏览器访问
http://localhost:10000
,10000端口号是我们在application.yml
配置文件内设置的server.port
的值。 - 成功访问到
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
<!-- 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>
健康检查,注册中心将死去的服务剔除