Eureka概述
服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心。
注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地。之后服务会被30s(可配置)发送一个心跳信息,续约服务。
如果服务治理中心在90s内没有收到一个服务的续约,就会认为服务已经挂了,会把服务注册信息删掉。
服务停止前,服务会主动发送一个停止请求,服务治理中心会删除这个服务的信息。
如果Eureka Server收到的心跳包不足正常值的85%(可配置)就会进入自我保护模式,在这种模式下,Eureka Server不会删除任何服务信息。
Eureka架构图
![SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建](http://p2.ttnews.xyz/loading.gif)
- Registery:表示服务向注册中心注册。
- Renew:表示服务向注册中心发送心跳,表示该服务还活着,注册中心不能删除改服务。
- Cancel:表示注册中心能删除该服务。
- Get Registery:表示该服务重新注册。
- Replicate:表示注册中心之间相互注册。
- Remote Call:表示远程调用。
搭建Eureka环境
(1) 创建SpringBoot项目
![SpringCloud之Eureka注册中心环境搭建(单节点),新手都能搭建](http://p2.ttnews.xyz/loading.gif)
(2) 删除多余的目录(src等目录,因为创建maven的聚合工程需要)只剩下pom文件,名字叫做eureka-father作为聚合工程的父级工程,如图
pom文件的内容如下:
<code><project> <description>SpringBoot-Eureka环境搭建多模块构建示例/<description> <modelversion>4.0.0/<modelversion> <name>eureka-father/<name> <packaging>pom/<packaging> <groupid>com.org.ldc/<groupid> <artifactid>eureka-father/<artifactid> <version>1.0.0.RELEASE/<version> <parent> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-parent/<artifactid> <version>2.0.2.RELEASE/<version> /<parent> <modules> <module>eureka3000/<module> /<modules> <dependencymanagement> <dependencies> <dependency> <groupid>com.org.ldc/<groupid> <artifactid>eureka3000/<artifactid> <version>0.0.1-SNAPSHOT/<version> /<dependency> /<dependencies> /<dependencymanagement>/<project>/<code>
(3) 创建子模块eureka3000,方法如图所示
子模块的pom文件内容如下:
<code><project> <modelversion>4.0.0/<modelversion> <groupid>com.org.ldc/<groupid> <artifactid>eureka3000/<artifactid> <version>0.0.1-SNAPSHOT/<version> <name>eureka3000/<name> <description>Demo project for Spring Boot/<description> <properties> <java.version>1.8/<java.version> /<properties> <parent> <groupid>com.org.ldc/<groupid> <artifactid>eureka-father/<artifactid> <version>1.0.0.RELEASE/<version> /<parent> <dependencies> <dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-starter-netflix-eureka-server/<artifactid> /<dependency> <dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-web/<artifactid> /<dependency> /<dependencies> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-dependencies/<artifactid> <version>Finchley.SR2/<version> <type>pom/<type> <scope>import/<scope> /<dependency> /<dependencies> /<dependencymanagement> <build> <plugins> <plugin> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-maven-plugin/<artifactid> /<plugin> /<plugins> /<build>/<project>/<code>
子模块的启动类如下,这里需要注意的就是要在类上加上@EnableEurekaServer注解。
<code>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@EnableEurekaServerpublic class Eureka3000Application { public static void main(String[] args) { SpringApplication.run(Eureka3000Application.class, args); }}/<code>
子模块的application.properties文件的内容如下:
<code>server: port: 3000eureka: 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/<code>
以上创建的表示一个eureka节点,启动子模块的启动类,然后浏览器访问http://localhost:3000,就会出现如下页面,红色框内一开始是没有内容的,因为我这是搭建的有三个节点eureka和有注册服务的服务工程,所以红色框内会出现内容,所以搭建不要纠结这个,只要出现这个界面,就说明eureka环境搭建好了,但是使单节点的,不是集群的
(4) 接着创建服务模块,创建过程和创建子模块一样,不再赘述,名字叫做user5000,如图eureka3001、eureka3001是我创建的另外的两个注册中心节点
服务模块的pom文件内容如下:
<code><project> <modelversion>4.0.0/<modelversion> <groupid>com.org.ldc/<groupid> <artifactid>user5000/<artifactid> <version>0.0.1-SNAPSHOT/<version> <name>user5000/<name> <description>Demo project for Spring Boot/<description> <properties> <java.version>1.8/<java.version> /<properties> <parent> <groupid>com.org.ldc/<groupid> <artifactid>eureka-father/<artifactid> <version>1.0.0.RELEASE/<version> /<parent> <dependencies> <dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-starter-netflix-eureka-client/<artifactid> /<dependency> <dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-web/<artifactid> /<dependency> /<dependencies> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-dependencies/<artifactid> <version>Finchley.SR2/<version> <type>pom/<type> <scope>import/<scope> /<dependency> /<dependencies> /<dependencymanagement> <build> <plugins> <plugin> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-maven-plugin/<artifactid> /<plugin> /<plugins> /<build>/<project>/<code>
application.yml文件内容如下:
<code>server: port: 5000eureka: 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 /<code>
启动类如下:需要加上@EnableEurekaClient 注解
<code>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); }}/<code>
(4) 最后测试先启动注册中心的启动类,然后启动服务模块的启动类,最后访问localhost:3000出现如下图说明搭建成功。
END
原文链接:https://mp.weixin.qq.com/s/fhnSEAhHLJkiS9vqTloqlg
閱讀更多 Java技術虎 的文章