05-SpringCloud 之 Eureka
什么是 Eureka
Eureka 即:服务发现框架,提供服务注册与发现功能,分为 Eureka Server 和 Eureka Client
- Eureka Server:作为服务端,提供服务注册与订阅功能
- Eureka Client:作为客户端,Provider 可以到 Eureka Server 中注册自己提供的服务,Consumer 可以从 Eureka Server 中订阅自己所需要的服务
Eureka Server 配置
-
新建 Module:spring-cloud-eureka-server-7001
-
编写 pom 引入依赖
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-netflix</artifactId> <groupId>com.kaishen</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>spring-cloud-eureka-server-7001</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- 引入该模块所需依赖 --> <dependencies> <!-- Eureka Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project> -
编写 application.yml
application.yml
server: port: 7001 # Eureka 配置 eureka: instance: hostname: eureka7001.com # 服务实例名 client: register-with-eureka: false # 是否向注册中心注册 fetch-registry: false # 自己就是注册中心 service-url: defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ # 此为集群配置,用逗号分隔,可只配一个,作为当个注册中心使用 -
编写启动类,开启注解
EurekaServerApplication7001
package com.kaishen; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /** * Eureka 服务启动类 * @author : toby * Create in 17:46 2022/5/8 */ @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication7001 { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication7001.class, args); } }
Eureka Server 集群配置
-
主机设置,可以在 C:\Windows\System32\drivers\etc\hosts 中模拟不同主机,实现伪集群
![Eureka Server]()
-
同 Eureka Server 配置,创建 spring-cloud-eureka-server-7002/spring-cloud-eureka-server-7003
-
修改各自的 application.yml,将 eureka.client.service-url.defaultZone 属性配置为集群即可
-
启动集群,访问任意节点可以看到以下界面,即集群配置完成
![集群配置]()
Eureka Client 配置
-
新建 Module:spring-cloud-provider-dept-8001
-
编写 pom 引入依赖
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-netflix</artifactId> <groupId>com.kaishen</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>spring-cloud-provider-dept-8001</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- 引入该模块所需依赖 --> <dependencies> <!-- api --> <dependency> <groupId>com.kaishen</groupId> <artifactId>spring-cloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- junit --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <scope>test</scope> </dependency> <!-- log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- SpringBoot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot 监控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- DataSource --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- Eureka Client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> </project> -
编写 application.yml
application.yml
server: port: 8001 # Spring 配置 spring: application: name: spring-cloud-provider-dept datasource: type: com.alibaba.druid.pool.DruidDataSource # 数据源 driver-class-name: org.gjt.mm.mysql.Driver # 驱动 url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: root password: 123456 # MyBatis 配置 mybatis: mapper-locations: classpath:mybatis/mappings/*.xml type-aliases-package: com.kaishen.pojo # 监控信息配置 info: app.name: kaishen-spring-cloud-dept8001 # Eureka 配置 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: spring-cloud-provider-dept8001 # 服务描述信息 prefer-ip-address: true # 显示 ip 地 ####### Consumer 配置如下 ####### server: port: 80 # Eureka 配置 eureka: client: register-with-eureka: false # Consumer 无需注册 service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ -
编写启动类,开启注解:
DeptProviderApplication8001
package com.kaishen; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.hystrix.EnableHystrix; /** * 部门服务启动类 * @author : toby * Create in 18:50 2022/5/8 */ @SpringBootApplication @EnableEurekaClient public class DeptProviderApplication8001 { public static void main(String[] args) { SpringApplication.run(DeptProviderApplication8001.class, args); } } -
启动服务后,可在 Eureka Server 界面看到如下信息,即已完成服务注册
![服务注册]()
-
之后便可继续完善微服务业务功能,新建 dao、mapper、service、controller 等
Eureka 自我保护机制
- 默认情况下,EurekaServer 在一定时间内 (默认 90s) 没有接收到微服务的心跳,EurekaServer 将会移除该微服务的实例
- 自我保护机制:如果在 15 分钟内超过 85% 的节点都没有了正常心跳,那么 Eureka 就会认为客户端与注册中心发生了网络故障,EurekaServer 将自动进入自我保护状态,此时会出现以下几种情况
- EurekaServer 不再从注册列表中移除因长时间没有收到心跳的服务
- EurekaServer 仍然能够接收新的服务注册与查询请求,但不会被同步到其他节点上 (即:保证当前节点仍然可用)
- 当网络稳定后,当前实例上新的注册信息会被同步到其他节点
- 关闭自我保护机制(不推荐):
eureka.server.enable-self-preservation = false




浙公网安备 33010602011771号