【SpringCloud】Eureka
文章目录
- Eureka的简介
- 概念
- 原理
- 三大角色
- 使用Eureka
- Eureka的服务使用
- 服务提供者配置Eureka Client注册进Eureka
- 使用actuator,监控信息
- Eureka的Discovery
- 客户端(消费者)配置Eureka
- Q&A,思路
- 问题现象:
- 分析原因:
- 解决方案:
- 计划降版本 ×
- 升级SpringBoot的版本 兼容到出现RestClient,解决这个问题
- Eureka的集成环境配置
- Eureka集群
- 实践
- Eureka和Zookeeper对比
- 回顾CAP原则
- 数据库ACID原则
- CAP原则
- Zookeeper的保证点:CP
- Eureka的保证点:AP
- Nacos,兼具CP/AP切换的新方案
- CP
- AP
Eureka的简介
概念
是NetFlix的一个子模块,遵循着AP原则,是基于REST的服务,用于定位服务,实现服务注册进去,消费者拿的话直接注册进去就好了,类似于Zookeeper;
原理
- Eureka是C/S架构的;
- SpringCloud封装NetFlix的Eureka实现服务注册和发现,类似于Zookeeper;
- Eureka作为服务注册功能的服务器,他是服务注册中心;
- 其他微服务通过Eureka的客户端连接到EurekaServer并维持心跳连接(定期的发送消息确保正常连接);
- 使用EurekaServer进行监控其他的微服务是否正常运行,类似于Dubbo Admin;
三大角色
- Eureka Server 提供服务的注册与发现
- Server Provider 服务者,提供服务
- Server Consumer 消费者,使用服务
使用Eureka
创建项目三件套:
- 导入依赖
- 配置文件
- 开启服务
- 配置类
- 导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>4.0.3</version></dependency>
- 配置文件,SpringBoot的配置文件是application.yaml/application.properties
# 端口号设置
server:port: 7001# Eureka配置
eureka:instance:hostname: localhost # Eureka的实例名称client:register-with-eureka: false # 是否注册自己fetch-registry: false # 是否从EurekaServer获取注册信息,false:自己是注册中心service-url: # 指定与EurekaServer交互的地址,查询注册信息的地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 默认的EurekaServer地址
service-url的defaultZone 参照service-url这个配置类中的设置的默认的serviceUrl进行设置;

- 开启服务
@EnableEurekaServer // 启动一个服务注册中心
@SpringBootApplication
public class EurekaServer_7001 {public static void main(String[] args) {SpringApplication.run(EurekaServer_7001.class, args);}
}
- 配置类,即
@Bean、@Configuration等相关内容,Eureka 目前不需要; - 启动,测试,疏通


Eureka的服务使用
服务提供者配置Eureka Client注册进Eureka
- 导入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-eureka-client</artifactId><version>4.0.3</version></dependency>
- 编写配置文件
# 注册中心 配置到7001中
eureka:client:service-url:defaultZone: http://localhost:7001/eureka
- 开启服务
@EnableEurekaClient
在2022.0.x系列之后,该注解移除,4.0.3属于2022.0.x之后,所以不需要在进行单独启用,只要满足了注册条件,会自动开启Eureka的注册功能;
查看控制台log:Registering application YOUR-SERVICE-NAME with eureka with status UP,即启用成功;
- 配置类
- 启动测试失败,两个服务都确认下,发现出现问题 : Q&A
- 启动成功,Eureka服务启动成功,没有检测到8001的服务供应商


- Client启动成功,服务instance registry 注册成功;


- 配置application.yaml, 修改Eureka的名字 为
springcloud-provider-dept得到结果如下:


使用actuator,监控信息
解决这种问题:
- 导入依赖,如果没有MVC依赖的话,导入web依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 配置application.yaml,注意是哪个,如果是想要看到服务提供者的info信息的场景,将信息更新到8001的端口下的application.yaml下,依赖同上;

- 启动测试,调查问题

- 调查发现,SpringBoot3只会暴露health,没有info,手动配置
management:endpoints:web:exposure:include: info,health# "*" 或 include: info,health
- 依旧不行,检查发现SpringBoot3.4.5 之后,在SpringCloud 2024.0.0已经官方移除了 Eureka的支持,转为社区版进行维护,需要手动开启env
management:info:env:enabled: true #启用环境属性贡献器
- yes,内容能够查询到

Eureka有一个自我保护机制,在微服务不用的情况,不会立即清除;
它本身的设计哲学就是会保护服务注册表中的所有信息,不再删除服务注册表中的数据(不注销任何微服务),当网络故障恢复后,会自动退出自动保护机制;
好死不如赖活着。
Eureka的Discovery
- 代码如下:
import org.springframework.cloud.client.discovery.DiscoveryClient;// 获得一些配置的信息
@Autowired
private DiscoveryClient discoveryClient;// 注册进来的微服务,获取消息
@GetMapping("/dept/discovery")
public Object discovery() {// 获取微服务列表的清单List<String> services = discoveryClient.getServices();System.out.println("discovery-->services:" + services);// 得到一个具体的微服务信息,通过具体的微服务id,applicationName;List<ServiceInstance> instances = discoveryClient.getInstances("SPRINGCLOUD-PROVIDER-DEPT");instances.forEach(instance -> {System.out.println(instance.getHost() + "\t"+ instance.getPort() + "\t"+ instance.getUri() + "\t"+ instance.getServiceId());});return this.discoveryClient;
}
- 测试疏通


客户端(消费者)配置Eureka
Q&A,思路
问题现象:
"D:\Program Files\Java\jdk-21.0.8+9\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50033,suspend=y,server=n -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:C:\Users\杨\AppData\Local\JetBrains\IntelliJIdea2023.2\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "E:\git-workspace\SpringCloudStudy\springcloud-eureka-7001\target\classes;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter-netflix-eureka-server\4.2.0\spring-cloud-starter-netflix-eureka-server-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter\4.2.0\spring-cloud-starter-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter\3.1.4\spring-boot-starter-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-logging\3.1.4\spring-boot-starter-logging-3.1.4.jar;D:\work\apache-maven\apache-maven-3\ch\qos\logback\logback-classic\1.4.11\logback-classic-1.4.11.jar;D:\work\apache-maven\apache-maven-3\ch\qos\logback\logback-core\1.4.11\logback-core-1.4.11.jar;D:\work\apache-maven\apache-maven-3\org\apache\logging\log4j\log4j-to-slf4j\2.20.0\log4j-to-slf4j-2.20.0.jar;D:\work\apache-maven\apache-maven-3\org\apache\logging\log4j\log4j-api\2.20.0\log4j-api-2.20.0.jar;D:\work\apache-maven\apache-maven-3\org\slf4j\jul-to-slf4j\2.0.9\jul-to-slf4j-2.0.9.jar;D:\work\apache-maven\apache-maven-3\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\work\apache-maven\apache-maven-3\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-context\4.2.0\spring-cloud-context-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\security\spring-security-crypto\6.1.4\spring-security-crypto-6.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-commons\4.2.0\spring-cloud-commons-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\bouncycastle\bcprov-jdk18on\1.78.1\bcprov-jdk18on-1.78.1.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-netflix-eureka-server\4.2.0\spring-cloud-netflix-eureka-server-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-web\3.1.4\spring-boot-starter-web-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-json\3.1.4\spring-boot-starter-json-3.1.4.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.2\jackson-datatype-jdk8-2.15.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.2\jackson-datatype-jsr310-2.15.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.2\jackson-module-parameter-names-2.15.2.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-tomcat\3.1.4\spring-boot-starter-tomcat-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-core\10.1.13\tomcat-embed-core-10.1.13.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-el\10.1.13\tomcat-embed-el-10.1.13.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.13\tomcat-embed-websocket-10.1.13.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-web\6.0.12\spring-web-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-webmvc\6.0.12\spring-webmvc-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-actuator\3.1.4\spring-boot-starter-actuator-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-actuator-autoconfigure\3.1.4\spring-boot-actuator-autoconfigure-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-actuator\3.1.4\spring-boot-actuator-3.1.4.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-observation\1.11.4\micrometer-observation-1.11.4.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-commons\1.11.4\micrometer-commons-1.11.4.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-core\1.11.4\micrometer-core-1.11.4.jar;D:\work\apache-maven\apache-maven-3\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\work\apache-maven\apache-maven-3\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-freemarker\3.1.4\spring-boot-starter-freemarker-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\freemarker\freemarker\2.3.32\freemarker-2.3.32.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-context-support\6.0.12\spring-context-support-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-netflix-eureka-client\4.2.0\spring-cloud-netflix-eureka-client-4.2.0.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-client\2.0.4\eureka-client-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\thoughtworks\xstream\xstream\1.4.20\xstream-1.4.20.jar;D:\work\apache-maven\apache-maven-3\io\github\x-stream\mxparser\1.2.2\mxparser-1.2.2.jar;D:\work\apache-maven\apache-maven-3\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;D:\work\apache-maven\apache-maven-3\com\netflix\spectator\spectator-api\1.7.3\spectator-api-1.7.3.jar;D:\work\apache-maven\apache-maven-3\org\slf4j\slf4j-api\2.0.9\slf4j-api-2.0.9.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;D:\work\apache-maven\apache-maven-3\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\work\apache-maven\apache-maven-3\commons-configuration\commons-configuration\1.10\commons-configuration-1.10.jar;D:\work\apache-maven\apache-maven-3\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\work\apache-maven\apache-maven-3\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;D:\work\apache-maven\apache-maven-3\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;D:\work\apache-maven\apache-maven-3\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;D:\work\apache-maven\apache-maven-3\joda-time\joda-time\2.3\joda-time-2.3.jar;D:\work\apache-maven\apache-maven-3\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;D:\work\apache-maven\apache-maven-3\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;D:\work\apache-maven\apache-maven-3\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\work\apache-maven\apache-maven-3\com\google\code\gson\gson\2.10.1\gson-2.10.1.jar;D:\work\apache-maven\apache-maven-3\com\netflix\servo\servo-core\0.5.3\servo-core-0.5.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;D:\work\apache-maven\apache-maven-3\javax\annotation\javax.annotation-api\1.2\javax.annotation-api-1.2.jar;D:\work\apache-maven\apache-maven-3\org\codehaus\jettison\jettison\1.5.4\jettison-1.5.4.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\client5\httpclient5\5.2.1\httpclient5-5.2.1.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\core5\httpcore5\5.2.2\httpcore5-5.2.2.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\core5\httpcore5-h2\5.2.2\httpcore5-h2-5.2.2.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-client-jersey3\2.0.4\eureka-client-jersey3-2.0.4.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\connectors\jersey-apache-connector\3.1.3\jersey-apache-connector-3.1.3.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-core-jersey3\2.0.4\eureka-core-jersey3-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-core\2.0.4\eureka-core-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\guava\33.0.0-jre\guava-33.0.0-jre.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\failureaccess\1.0.2\failureaccess-1.0.2.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\work\apache-maven\apache-maven-3\org\checkerframework\checker-qual\3.41.0\checker-qual-3.41.0.jar;D:\work\apache-maven\apache-maven-3\com\google\errorprone\error_prone_annotations\2.23.0\error_prone_annotations-2.23.0.jar;D:\work\apache-maven\apache-maven-3\com\google\j2objc\j2objc-annotations\2.8\j2objc-annotations-2.8.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\containers\jersey-container-servlet\3.1.3\jersey-container-servlet-3.1.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\containers\jersey-container-servlet-core\3.1.3\jersey-container-servlet-core-3.1.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-common\3.1.3\jersey-common-3.1.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\osgi-resource-locator\1.0.3\osgi-resource-locator-1.0.3.jar;D:\work\apache-maven\apache-maven-3\jakarta\ws\rs\jakarta.ws.rs-api\3.1.0\jakarta.ws.rs-api-3.1.0.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-server\3.1.3\jersey-server-3.1.3.jar;D:\work\apache-maven\apache-maven-3\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;D:\work\apache-maven\apache-maven-3\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-client\3.1.3\jersey-client-3.1.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\inject\jersey-hk2\3.1.3\jersey-hk2-3.1.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-locator\3.0.4\hk2-locator-3.0.4.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\external\aopalliance-repackaged\3.0.4\aopalliance-repackaged-3.0.4.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-utils\3.0.4\hk2-utils-3.0.4.jar;D:\work\apache-maven\apache-maven-3\org\javassist\javassist\3.29.2-GA\javassist-3.29.2-GA.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\spring-bridge\3.1.1\spring-bridge-3.1.1.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-api\3.1.1\hk2-api-3.1.1.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.15.2\jackson-dataformat-xml-2.15.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-core\2.15.2\jackson-core-2.15.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-annotations\2.15.2\jackson-annotations-2.15.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-databind\2.15.2\jackson-databind-2.15.2.jar;D:\work\apache-maven\apache-maven-3\org\codehaus\woodstox\stax2-api\4.2.1\stax2-api-4.2.1.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\woodstox\woodstox-core\6.5.1\woodstox-core-6.5.1.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter-loadbalancer\4.2.0\spring-cloud-starter-loadbalancer-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-loadbalancer\4.2.0\spring-cloud-loadbalancer-4.2.0.jar;D:\work\apache-maven\apache-maven-3\io\projectreactor\reactor-core\3.5.10\reactor-core-3.5.10.jar;D:\work\apache-maven\apache-maven-3\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\work\apache-maven\apache-maven-3\io\projectreactor\addons\reactor-extra\3.5.1\reactor-extra-3.5.1.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-cache\3.1.4\spring-boot-starter-cache-3.1.4.jar;D:\work\apache-maven\apache-maven-3\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\jaxb-runtime\4.0.3\jaxb-runtime-4.0.3.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\jaxb-core\4.0.3\jaxb-core-4.0.3.jar;D:\work\apache-maven\apache-maven-3\jakarta\xml\bind\jakarta.xml.bind-api\4.0.1\jakarta.xml.bind-api-4.0.1.jar;D:\work\apache-maven\apache-maven-3\jakarta\activation\jakarta.activation-api\2.1.2\jakarta.activation-api-2.1.2.jar;D:\work\apache-maven\apache-maven-3\org\eclipse\angus\angus-activation\2.0.1\angus-activation-2.0.1.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\txw2\4.0.3\txw2-4.0.3.jar;D:\work\apache-maven\apache-maven-3\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-devtools\3.1.4\spring-boot-devtools-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot\3.1.4\spring-boot-3.1.4.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-core\6.0.12\spring-core-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-jcl\6.0.12\spring-jcl-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-context\6.0.12\spring-context-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-aop\6.0.12\spring-aop-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-beans\6.0.12\spring-beans-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-expression\6.0.12\spring-expression-6.0.12.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-autoconfigure\3.1.4\spring-boot-autoconfigure-3.1.4.jar;D:\IntelliJ IDEA 2023.2\lib\idea_rt.jar" com.cloud.springcloud.EurekaServer_7001
已连接到地址为 ''127.0.0.1:50033',传输: '套接字'' 的目标虚拟机. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.1.4)2025-10-23T22:33:26.613+08:00 INFO 32148 --- [ restartedMain] c.cloud.springcloud.EurekaServer_7001 : Starting EurekaServer_7001 using Java 21.0.8 with PID 32148 (E:\git-workspace\SpringCloudStudy\springcloud-eureka-7001\target\classes started by yang2s in E:\git-workspace\SpringCloudStudy)
2025-10-23T22:33:26.614+08:00 INFO 32148 --- [ restartedMain] c.cloud.springcloud.EurekaServer_7001 : No active profile set, falling back to 1 default profile: "default"
2025-10-23T22:33:26.665+08:00 INFO 32148 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2025-10-23T22:33:26.665+08:00 INFO 32148 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2025-10-23T22:33:27.458+08:00 INFO 32148 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=d04e163e-7f33-3ae0-b475-b6b8ea27b9e5
2025-10-23T22:33:27.504+08:00 WARN 32148 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server
2025-10-23T22:33:27.515+08:00 INFO 32148 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-10-23T22:33:27.534+08:00 ERROR 32148 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedorg.springframework.context.ApplicationContextException: Unable to start web serverat org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) ~[spring-context-6.0.12.jar:6.0.12]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-3.1.4.jar:3.1.4]at com.cloud.springcloud.EurekaServer_7001.main(EurekaServer_7001.java:11) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.1.4.jar:3.1.4]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat': org/springframework/web/client/RestClient$Builderat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:605) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:412) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:218) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-3.1.4.jar:3.1.4]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) ~[spring-boot-3.1.4.jar:3.1.4]... 11 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/client/RestClient$Builderat org.springframework.cloud.client.loadbalancer.LoadBalancerRestClientBuilderBeanPostProcessor.isSupported(LoadBalancerRestClientBuilderBeanPostProcessor.java:69) ~[spring-cloud-commons-4.2.0.jar:4.2.0]at org.springframework.cloud.client.loadbalancer.AbstractLoadBalancerBlockingBuilderBeanPostProcessor.postProcessBeforeInitialization(AbstractLoadBalancerBlockingBuilderBeanPostProcessor.java:49) ~[spring-cloud-commons-4.2.0.jar:4.2.0]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) ~[spring-beans-6.0.12.jar:6.0.12]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.12.jar:6.0.12]... 28 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.web.client.RestClient$Builderat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]... 33 common frames omitted已与地址为 ''127.0.0.1:50033',传输: '套接字'' 的目标虚拟机断开连接进程已结束,退出代码为 0
分析原因:
spring-cloud-starter-netflix-eureka-server和当前SpringBoot 3.1.4 版本不兼容;
解决方案:
计划降版本 ×
强行控制版本在3.1.4相兼容的版本中,经调查发现 4.0.3 确实兼容 3.1.4;
但是检查maven依赖发现,两者版本还是不一样,应该是这个地方出现的问题。

升级SpringBoot的版本 兼容到出现RestClient,解决这个问题
- 注释掉pom中的版本号,使用springcloud 的bom版本
- 查看当前Springcloud的 SpringBoot版本是 2024.0.0,所以所对应的版本要高上许多,其中使用的Eureka的BOM版本也是4.2.0

- 调整Springboot的版本或者降级SpringCloud的版本,今年是2025年,所以使用2024.0.0是合理的,2024的版本已经趋于稳定,所以3.1.4的SpringBoot有些落后,升级SpringBoot的依赖启动器;
- 使用那个版本需要参照SpringCloud,根据官网介绍,使用3.4.x是最优选择;但是因为我们是 2024.0.0,所以3.3.x肯定是可以全面支持Moorgate的,当前SpringBoot最新版本为 3.5.7,考虑到版本迭代的稳定性,决定使用 SpringBoot 3.3.5作为此次学习的基础
Springboot的version,
- 调整完之后,重新导入依赖组件,查看问题是否已经解决;
- 依旧有问题,必须要使用SpringBoot3.4.x,无语··· ···

- 改完检查log,启动成功
"D:\Program Files\Java\jdk-21.0.8+9\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50276,suspend=y,server=n -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:C:\Users\杨\AppData\Local\JetBrains\IntelliJIdea2023.2\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath "E:\git-workspace\SpringCloudStudy\springcloud-eureka-7001\target\classes;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter-netflix-eureka-server\4.2.0\spring-cloud-starter-netflix-eureka-server-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter\4.2.0\spring-cloud-starter-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter\3.4.5\spring-boot-starter-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-logging\3.4.5\spring-boot-starter-logging-3.4.5.jar;D:\work\apache-maven\apache-maven-3\ch\qos\logback\logback-classic\1.5.18\logback-classic-1.5.18.jar;D:\work\apache-maven\apache-maven-3\ch\qos\logback\logback-core\1.5.18\logback-core-1.5.18.jar;D:\work\apache-maven\apache-maven-3\org\apache\logging\log4j\log4j-to-slf4j\2.24.3\log4j-to-slf4j-2.24.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\logging\log4j\log4j-api\2.24.3\log4j-api-2.24.3.jar;D:\work\apache-maven\apache-maven-3\org\slf4j\jul-to-slf4j\2.0.17\jul-to-slf4j-2.0.17.jar;D:\work\apache-maven\apache-maven-3\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\work\apache-maven\apache-maven-3\org\yaml\snakeyaml\2.3\snakeyaml-2.3.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-context\4.2.0\spring-cloud-context-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\security\spring-security-crypto\6.4.5\spring-security-crypto-6.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-commons\4.2.0\spring-cloud-commons-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\bouncycastle\bcprov-jdk18on\1.78.1\bcprov-jdk18on-1.78.1.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-netflix-eureka-server\4.2.0\spring-cloud-netflix-eureka-server-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-web\3.4.5\spring-boot-starter-web-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-json\3.4.5\spring-boot-starter-json-3.4.5.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.18.3\jackson-datatype-jdk8-2.18.3.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.18.3\jackson-datatype-jsr310-2.18.3.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\module\jackson-module-parameter-names\2.18.3\jackson-module-parameter-names-2.18.3.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-tomcat\3.4.5\spring-boot-starter-tomcat-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-core\10.1.40\tomcat-embed-core-10.1.40.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-el\10.1.40\tomcat-embed-el-10.1.40.jar;D:\work\apache-maven\apache-maven-3\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.40\tomcat-embed-websocket-10.1.40.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-web\6.2.6\spring-web-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-webmvc\6.2.6\spring-webmvc-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-actuator\3.4.5\spring-boot-starter-actuator-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-actuator-autoconfigure\3.4.5\spring-boot-actuator-autoconfigure-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-actuator\3.4.5\spring-boot-actuator-3.4.5.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-observation\1.14.6\micrometer-observation-1.14.6.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-commons\1.14.6\micrometer-commons-1.14.6.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-jakarta9\1.14.6\micrometer-jakarta9-1.14.6.jar;D:\work\apache-maven\apache-maven-3\io\micrometer\micrometer-core\1.14.6\micrometer-core-1.14.6.jar;D:\work\apache-maven\apache-maven-3\org\hdrhistogram\HdrHistogram\2.2.2\HdrHistogram-2.2.2.jar;D:\work\apache-maven\apache-maven-3\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-freemarker\3.4.5\spring-boot-starter-freemarker-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\freemarker\freemarker\2.3.34\freemarker-2.3.34.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-context-support\6.2.6\spring-context-support-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-netflix-eureka-client\4.2.0\spring-cloud-netflix-eureka-client-4.2.0.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-client\2.0.4\eureka-client-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\thoughtworks\xstream\xstream\1.4.20\xstream-1.4.20.jar;D:\work\apache-maven\apache-maven-3\io\github\x-stream\mxparser\1.2.2\mxparser-1.2.2.jar;D:\work\apache-maven\apache-maven-3\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;D:\work\apache-maven\apache-maven-3\com\netflix\spectator\spectator-api\1.7.3\spectator-api-1.7.3.jar;D:\work\apache-maven\apache-maven-3\org\slf4j\slf4j-api\2.0.17\slf4j-api-2.0.17.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;D:\work\apache-maven\apache-maven-3\commons-configuration\commons-configuration\1.10\commons-configuration-1.10.jar;D:\work\apache-maven\apache-maven-3\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\work\apache-maven\apache-maven-3\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;D:\work\apache-maven\apache-maven-3\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;D:\work\apache-maven\apache-maven-3\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;D:\work\apache-maven\apache-maven-3\joda-time\joda-time\2.3\joda-time-2.3.jar;D:\work\apache-maven\apache-maven-3\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;D:\work\apache-maven\apache-maven-3\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;D:\work\apache-maven\apache-maven-3\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\work\apache-maven\apache-maven-3\com\google\code\gson\gson\2.11.0\gson-2.11.0.jar;D:\work\apache-maven\apache-maven-3\com\netflix\servo\servo-core\0.5.3\servo-core-0.5.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;D:\work\apache-maven\apache-maven-3\javax\annotation\javax.annotation-api\1.2\javax.annotation-api-1.2.jar;D:\work\apache-maven\apache-maven-3\org\codehaus\jettison\jettison\1.5.4\jettison-1.5.4.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\client5\httpclient5\5.4.3\httpclient5-5.4.3.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\core5\httpcore5\5.3.4\httpcore5-5.3.4.jar;D:\work\apache-maven\apache-maven-3\org\apache\httpcomponents\core5\httpcore5-h2\5.3.4\httpcore5-h2-5.3.4.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-client-jersey3\2.0.4\eureka-client-jersey3-2.0.4.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\connectors\jersey-apache-connector\3.1.10\jersey-apache-connector-3.1.10.jar;D:\work\apache-maven\apache-maven-3\commons-codec\commons-codec\1.17.2\commons-codec-1.17.2.jar;D:\work\apache-maven\apache-maven-3\commons-logging\commons-logging\1.3.4\commons-logging-1.3.4.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-core-jersey3\2.0.4\eureka-core-jersey3-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\netflix\eureka\eureka-core\2.0.4\eureka-core-2.0.4.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\guava\33.0.0-jre\guava-33.0.0-jre.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\failureaccess\1.0.2\failureaccess-1.0.2.jar;D:\work\apache-maven\apache-maven-3\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\work\apache-maven\apache-maven-3\org\checkerframework\checker-qual\3.41.0\checker-qual-3.41.0.jar;D:\work\apache-maven\apache-maven-3\com\google\errorprone\error_prone_annotations\2.23.0\error_prone_annotations-2.23.0.jar;D:\work\apache-maven\apache-maven-3\com\google\j2objc\j2objc-annotations\2.8\j2objc-annotations-2.8.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\containers\jersey-container-servlet\3.1.10\jersey-container-servlet-3.1.10.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\containers\jersey-container-servlet-core\3.1.10\jersey-container-servlet-core-3.1.10.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-common\3.1.10\jersey-common-3.1.10.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\osgi-resource-locator\1.0.3\osgi-resource-locator-1.0.3.jar;D:\work\apache-maven\apache-maven-3\jakarta\ws\rs\jakarta.ws.rs-api\3.1.0\jakarta.ws.rs-api-3.1.0.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-server\3.1.10\jersey-server-3.1.10.jar;D:\work\apache-maven\apache-maven-3\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;D:\work\apache-maven\apache-maven-3\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\core\jersey-client\3.1.10\jersey-client-3.1.10.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jersey\inject\jersey-hk2\3.1.10\jersey-hk2-3.1.10.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-locator\3.0.6\hk2-locator-3.0.6.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\external\aopalliance-repackaged\3.0.6\aopalliance-repackaged-3.0.6.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-utils\3.0.6\hk2-utils-3.0.6.jar;D:\work\apache-maven\apache-maven-3\org\javassist\javassist\3.30.2-GA\javassist-3.30.2-GA.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\spring-bridge\3.1.1\spring-bridge-3.1.1.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\hk2\hk2-api\3.1.1\hk2-api-3.1.1.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.18.3\jackson-dataformat-xml-2.18.3.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-core\2.18.3\jackson-core-2.18.3.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-annotations\2.18.3\jackson-annotations-2.18.3.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\jackson\core\jackson-databind\2.18.3\jackson-databind-2.18.3.jar;D:\work\apache-maven\apache-maven-3\org\codehaus\woodstox\stax2-api\4.2.2\stax2-api-4.2.2.jar;D:\work\apache-maven\apache-maven-3\com\fasterxml\woodstox\woodstox-core\7.0.0\woodstox-core-7.0.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-starter-loadbalancer\4.2.0\spring-cloud-starter-loadbalancer-4.2.0.jar;D:\work\apache-maven\apache-maven-3\org\springframework\cloud\spring-cloud-loadbalancer\4.2.0\spring-cloud-loadbalancer-4.2.0.jar;D:\work\apache-maven\apache-maven-3\io\projectreactor\reactor-core\3.7.5\reactor-core-3.7.5.jar;D:\work\apache-maven\apache-maven-3\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\work\apache-maven\apache-maven-3\io\projectreactor\addons\reactor-extra\3.5.2\reactor-extra-3.5.2.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-starter-cache\3.4.5\spring-boot-starter-cache-3.4.5.jar;D:\work\apache-maven\apache-maven-3\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\jaxb-runtime\4.0.5\jaxb-runtime-4.0.5.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\jaxb-core\4.0.5\jaxb-core-4.0.5.jar;D:\work\apache-maven\apache-maven-3\jakarta\xml\bind\jakarta.xml.bind-api\4.0.2\jakarta.xml.bind-api-4.0.2.jar;D:\work\apache-maven\apache-maven-3\jakarta\activation\jakarta.activation-api\2.1.3\jakarta.activation-api-2.1.3.jar;D:\work\apache-maven\apache-maven-3\org\eclipse\angus\angus-activation\2.0.2\angus-activation-2.0.2.jar;D:\work\apache-maven\apache-maven-3\org\glassfish\jaxb\txw2\4.0.5\txw2-4.0.5.jar;D:\work\apache-maven\apache-maven-3\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-devtools\3.4.5\spring-boot-devtools-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot\3.4.5\spring-boot-3.4.5.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-core\6.2.6\spring-core-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-jcl\6.2.6\spring-jcl-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-context\6.2.6\spring-context-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-aop\6.2.6\spring-aop-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-beans\6.2.6\spring-beans-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\spring-expression\6.2.6\spring-expression-6.2.6.jar;D:\work\apache-maven\apache-maven-3\org\springframework\boot\spring-boot-autoconfigure\3.4.5\spring-boot-autoconfigure-3.4.5.jar;D:\IntelliJ IDEA 2023.2\lib\idea_rt.jar" com.cloud.springcloud.EurekaServer_7001
已连接到地址为 ''127.0.0.1:50276',传输: '套接字'' 的目标虚拟机
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.4.5)2025-10-23T23:17:32.266+08:00 INFO 23780 --- [ restartedMain] c.cloud.springcloud.EurekaServer_7001 : Starting EurekaServer_7001 using Java 21.0.8 with PID 23780 (E:\git-workspace\SpringCloudStudy\springcloud-eureka-7001\target\classes started by yang2s in E:\git-workspace\SpringCloudStudy)
2025-10-23T23:17:32.274+08:00 INFO 23780 --- [ restartedMain] c.cloud.springcloud.EurekaServer_7001 : No active profile set, falling back to 1 default profile: "default"
2025-10-23T23:17:32.312+08:00 INFO 23780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2025-10-23T23:17:32.312+08:00 INFO 23780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2025-10-23T23:17:33.123+08:00 INFO 23780 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=58f054fc-8619-30bf-ab65-9f744168b5da
2025-10-23T23:17:33.419+08:00 INFO 23780 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 7001 (http)
2025-10-23T23:17:33.430+08:00 INFO 23780 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-10-23T23:17:33.430+08:00 INFO 23780 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.40]
2025-10-23T23:17:33.467+08:00 INFO 23780 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-10-23T23:17:33.468+08:00 INFO 23780 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1155 ms
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
2025-10-23T23:17:34.165+08:00 INFO 23780 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson
2025-10-23T23:17:34.167+08:00 INFO 23780 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson
2025-10-23T23:17:34.292+08:00 INFO 23780 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml
2025-10-23T23:17:34.292+08:00 INFO 23780 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml
2025-10-23T23:17:34.413+08:00 INFO 23780 --- [ restartedMain] o.s.v.b.OptionalValidatorFactoryBean : Failed to set up a Bean Validation provider: jakarta.validation.NoProviderFoundException: Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
2025-10-23T23:17:35.661+08:00 INFO 23780 --- [ restartedMain] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname
2025-10-23T23:17:35.922+08:00 INFO 23780 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2025-10-23T23:17:36.944+08:00 INFO 23780 --- [ restartedMain] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname
2025-10-23T23:17:36.980+08:00 WARN 23780 --- [ restartedMain] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2025-10-23T23:17:36.995+08:00 INFO 23780 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING
2025-10-23T23:17:37.008+08:00 INFO 23780 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1
2025-10-23T23:17:37.008+08:00 INFO 23780 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data.
2025-10-23T23:17:37.009+08:00 INFO 23780 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1761232657008 with initial instances count: 0
2025-10-23T23:17:37.039+08:00 INFO 23780 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initializing ...
2025-10-23T23:17:37.040+08:00 WARN 23780 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry
2025-10-23T23:17:37.046+08:00 INFO 23780 --- [ restartedMain] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: []
2025-10-23T23:17:37.046+08:00 INFO 23780 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initialized
2025-10-23T23:17:37.053+08:00 INFO 23780 --- [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint beneath base path '/actuator'
2025-10-23T23:17:37.107+08:00 INFO 23780 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application UNKNOWN with eureka with status UP
2025-10-23T23:17:37.114+08:00 INFO 23780 --- [ Thread-16] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false
2025-10-23T23:17:37.114+08:00 INFO 23780 --- [ Thread-16] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context
2025-10-23T23:17:37.114+08:00 INFO 23780 --- [ Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node
2025-10-23T23:17:37.114+08:00 INFO 23780 --- [ Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1
2025-10-23T23:17:37.114+08:00 INFO 23780 --- [ Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP
2025-10-23T23:17:37.116+08:00 INFO 23780 --- [ Thread-16] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2025-10-23T23:17:37.122+08:00 INFO 23780 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 7001 (http) with context path '/'
2025-10-23T23:17:37.122+08:00 INFO 23780 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001
2025-10-23T23:17:38.126+08:00 INFO 23780 --- [ restartedMain] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname
2025-10-23T23:17:38.145+08:00 INFO 23780 --- [ restartedMain] c.cloud.springcloud.EurekaServer_7001 : Started EurekaServer_7001 in 7.24 seconds (process running for 7.928)
2025-10-23T23:17:38.754+08:00 INFO 23780 --- [192.168.246.152] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-10-23T23:17:38.754+08:00 INFO 23780 --- [192.168.246.152] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-10-23T23:17:38.755+08:00 INFO 23780 --- [192.168.246.152] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
- 对应检查其他版本可以会出现冲突的地方,对应后,完美
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${springcloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>${druid.version}</version> <!-- 请检查Maven仓库获取最新版本 --></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies></dependencyManagement><build></build><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><springcloud.version>2024.0.0</springcloud.version><springboot.version>3.4.5</springboot.version><mysql.version>8.0.30</mysql.version><druid.version>1.2.23</druid.version><mybatis.version>3.0.5</mybatis.version><lombok.version>1.18.30</lombok.version></properties></project>
Eureka的集成环境配置
Eureka集群
- 建立三个700系列服务,

C:\Windows\System32\drivers\etc\hosts配置hostname设置域名解析,两个“不同主机名”实际都指向本机,但 Eureka 认为它们是不同节点。- 配置
service-url.defaultZone,关联其余两个注册中心,目的是告诉别人7001崩溃后,可以查询到7002或7003;
实践
- 配置application.yaml
server:port: 7001# Eureka配置
eureka:instance:
# hostname: localhost # Eureka的实例名称hostname: eureka7001.com # Eureka的实例名称client:register-with-eureka: false # 是否注册自己fetch-registry: false # 是否从EurekaServer获取注册信息,false:自己是注册中心service-url: # 指定与EurekaServer交互的地址,查询注册信息的地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 默认的EurekaServer地址defaultZone: http://eureka7002.com:7002/eureka/,http://localhost:7003/eureka/
- 启动项目进行测试
三个70的服务都启动,8001的服务提供者也启动;

注意点:
- 不要都用 localhost,在本地集群测试添加域名解析,也需要注意指向地址的问题
- register-with-eureka: false ,设置为false不会向其他 Eureka 注册自己,导致失败
- defaultZone 不能指向自己
Eureka和Zookeeper对比
回顾CAP原则
C:强一致性
A:可用性
P:分区容错性
数据库ACID原则
A:可用性
C:一致性
I:原子性
D:持久性
CAP原则
在分布式系统重,CAP原则只能够三选二,不可能同时满足三种要求;
Zookeeper保证的是CP,Eureka保证了AP原则。
| 特性 | Eureka | ZooKeeper |
|---|---|---|
| 所属生态 | Spring Cloud(Netflix OSS) | Apache Hadoop 生态(常用于 Kafka、HBase 等) |
| 主要用途 | 微服务架构中的服务注册与发现 | 分布式协调服务(支持注册发现、配置管理、分布式锁、Leader 选举等) |
| 设计哲学 | AP 系统(高可用优先) | CP 系统(强一致性优先) |
Nacos 是目前最流行的统一解决方案,同时支持服务发现 + 配置管理 + AP/CP 模式切换;
Zookeeper的保证点:CP
在向注册中旬查询服务列表的时候,我们可以容忍注册中心返回几分钟前的信息,但是不能接受服务直接停掉不可用;
服务注册中心的可用性要高于一致性,但是当Zookeeper出现这种情况之后,master节点失去联系,就会重选leader,这时候整个Zookeeper集群都处于不可用状态。
这种情况会使实践经过漫长的选举,虽然最终可以恢复,但是对于注册周期长大容忍性需要接受。出现故障后 可用性大大降低
Eureka的保证点:AP
在设计之初的时候,优先保证了 可用性,Eureka对于各个节点的地位都是平等的。
各个节点相互关联,如果出现失败,自动连接到另一个节点,确保系统的可用性,但是,相应出现的弊端出现,查询到的信息可能不是最新的,除此之外,Eureka还有一种自我保护机制。
Nacos,兼具CP/AP切换的新方案
| 能力 | Nacos | Eureka | ZooKeeper |
|---|---|---|---|
| 服务发现 | ✅(AP/CP 自适应) | ✅(仅 AP) | ✅(仅 CP) |
| 动态配置管理 | ✅(核心功能) | ❌ | ⚠️(需额外开发) |
| 一致性模型 | AP + CP 可切换 | 仅 AP | 仅 CP |
| 健康检查 | TCP/HTTP/MySQL/自定义 | 仅 HTTP 心跳 | 会话心跳(Session) |
| 多环境隔离 | ✅(Namespace) | ❌ | ⚠️(需路径规划) |
| 控制台 | ✅(内置 Web UI) | ✅(简单 UI) | ❌(需第三方工具) |
| Spring Cloud 集成 | ✅(Spring Cloud Alibaba) | ✅(原生支持) | ⚠️(需 Curator 封装) |

