基于Springcloud 2023.0.0, springboot3.2.1,JDK17
Q1: Lombok版本太低,导致JDK17不兼容:
Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @7e62cfa3
或者POJO不能正确序列化:POJO类没有被正确的引入
原因是:开始我没有正确的compile POJO(lombok没有起作用(原因就是版本太低,jdk不兼容)),导致我在编写provider/consumer 时,引用了本身就错误的POJO。
如何发现的?
- 我从
provider/consumer代码中,查看引用的POJO,发现跳转到一个没有getter,setter,constructor的pojo(lombok没有起效)
No Serialzier found for class and no properties discovered to create BeanSerializer
Q2: Provider/Consumer编写完后,consumer尝试post请求,通过restTemplate发送到Provider,更新数据调用时,发生500 error
- 原因:
POJO上@RequestBody的缺失导致 - 解决过程:
- 我是开启的Swagger 3,通过swagger-ui界面,先去
provider自主post请求,发现是200 OK。再去consumerpost请求,500 error。 - 随后,开启
Debug模式,定位到consumer请求到provider的方法时,body参数都是空的,数据没有传过来。 - 查看了网上,有人说postman调用怎么怎么的,我就尝试在postman上操作。发现了:
- JSON形式的body,在
provider自主post请求,会500 error,debug发现还是因为参数没有传进去。这就跟前面的问题很接近了。 - 随后,我尝试,通过URL上传值的方式,还是post请求,发现结果成功了。
这就很明显了,在代码中参数上@RequestBody的缺失导致的问题。
- JSON形式的body,在
- 我是开启的Swagger 3,通过swagger-ui界面,先去
Q3:Eureka学习
Eureka 服务注册与发现中心,同Zookeeper是一样的功能实现。
zookeeper需要我们自己下载安装,然后通过URL配置使用。
Eureka需要我们自己编写代码,然后再通过配置来实现。
这个错误,是Eureka自我保护机制,当注册表中的服务发生故障掉线,心跳机制终端,Eureka会继续保护服务注册表的信息,不会注销微服务信息。当服务再次上线回复心跳,Eureka会自动退出自我保护模式。参数配置(默认为true)eureka.server.enable-self-preservation
当配置关闭自我保护模式,Eureka会warning提示,并且当关闭微服务后,注册表中的服务信息也会随着关闭被注销移除掉。
有个问题,发现在微服务server准备向Eureka server做服务注册,由于我的版本(spring-cloud-dependencies 2023.0.0, spring-boot-dependencies 3.2.1, spring-cloud-starter-eureka1.4.7.RELEASE)@EnableEurekaClient这个注解已经被移除掉了。
查看资料,以及查看EurekaClientAutoConfiguration源码,此版本已不再受限于Enable注解中通过@Import导入的Bean,依赖项注入进来,对应的class类满足条件,而且@conditional注解中的配置项默认为true,所有不再需要注解配置,默认配置启动就能被发现注册。

Eureka简单Demo集群:
通过开启多个Eureka服务(不同host,port),通过配置eureka.client.service-url.defaultZone,集群关联其他几个Eureka服务:
eureka:
instance:
hostname: eureka-sever-7001.com #eureka服务端的实例名称
client:
register-with-eureka: false #表示是否向eureka注册中心注册自己
fetch-registry: false #false:表示自己为注册中心
service-url:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 单机模式
defaultZone: http://eureka-sever-7002.com:7002/eureka/,http://eureka-sever-7003.com:7003/eureka/ # 集群关联
微服务server如何加入到Eureka集群中?
通过配置参数:eureka.client.service-url.defaultZone
eureka:
instance:
instance-id: spring_cloud_provider_8001
client:
service-url:
defaultZone: http://eureka-sever-7001.com:7001/eureka/,http://eureka-sever-7002.com:7002/eureka/,http://eureka-sever-7003.com:7003/eureka/
最终实现功能:

持续更新中…
3089

被折叠的 条评论
为什么被折叠?



