Spring cloud初探遇到的问题

基于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。再去consumer post请求,500 error。
    • 随后,开启Debug模式,定位到consumer请求到provider的方法时,body参数都是空的,数据没有传过来。
    • 查看了网上,有人说postman调用怎么怎么的,我就尝试在postman上操作。发现了:
      • JSON形式的body,在provider自主post请求,会500 error,debug发现还是因为参数没有传进去。这就跟前面的问题很接近了。
      • 随后,我尝试,通过URL上传值的方式,还是post请求,发现结果成功了。
        在这里插入图片描述这就很明显了,在代码中参数上@RequestBody的缺失导致的问题。

Q3Eureka学习
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/

最终实现功能:
在这里插入图片描述
持续更新中…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值