一 Eureka 概述
服务启动时会生成服务的基本信息对象 InstanceInfo, 然后在启动时会 register 到服务治理中心.
注册完成后会从服务治理中心拉取所有的服务信息, 缓存在本地. 之后服务会被 30s(可配置)发送一个心跳信息, 续约服务.
如果服务治理中心在 90s 内没有收到一个服务的续约, 就会认为服务已经挂了, 会把服务注册信息删掉.
服务停止前, 服务会主动发送一个停止请求, 服务治理中心会删除这个服务的信息.
如果 Eureka Server 收到的心跳包不足正常值的 85%(可配置)就会进入自我保护模式, 在这种模式下, Eureka Server 不会删除任何服务信息.
二 Eureka 架构图
在这里插入图片描述
Registery: 表示服务向注册中心注册.
Renew: 表示服务向注册中心发送心跳, 表示该服务还活着, 注册中心不能删除改服务.
Cancel: 表示注册中心能删除该服务
Get Registery: 表示该服务重新注册
Replicate: 表示注册中心之间相互注册
Remote Call: 表示远程调用
三 搭建 Eureka 环境
创建 SpringBoot 项目
在这里插入图片描述
删除多余的目录 (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">
- <!-- 基本信息 -->
- <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>
- <!-- 继承说明: 这里继承 SpringBoot 提供的父工程 -->
- <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>
创建子模块 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">
- <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>
- <!-- 引入 eurekaserver 依赖 -->
- <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>
子模块的启动类如下: 这里需要注意的就是要在类上加上 @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 环境搭建好了, 但是使单节点的, 不是集群的
在这里插入图片描述
接着创建服务模块, 创建过程和创建子模块一样, 不再赘述, 名字叫做 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">
- <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>
application.YAML 文件内容如下:
- 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);
- }
- }
最后测试先启动注册中心的启动类, 然后启动服务模块的启动类, 最后访问 localhost:3000 出现如下图说明搭建成功
在这里插入图片描述
更多的教程请关注公众号 非科班的科班,. 假如你觉得我写的好, 路过的请点个赞, 谢谢.
Spring-Cloud 之 Eureka 注册中心环境搭建(单节点)
来源: http://www.bubuko.com/infodetail-3333268.html