本次公司架构升级,基本设想是最大限度的利用原有架构的情况下使用熔断及监控服务,但因为hystri停止更新对新的springcloud及springboot兼容不好,只好将目光转向当前火热的sentinel进行服务的监控及熔断降级,又因为sentinel支持nacos、zookeeper等注册中心,不支持已经停更的eureka注册中心,所以只好将公司框架变为nacos+zuul+config+openfeign+sentinel的组合,下面总结下框架升级工作中遇到的问题。
一、springcloud版本选择
鉴于springcloud的版本与springboot息息相关,所以在选取springcloud+springboot版本时一定要参照官网
https://docs.spring.io/spring-cloud/docs/Hoxton.SR8/reference/html/,本次升级选用Hoxton.SR8+2.3.3.RELEASE的搭配。
二、springcloud alibaba版本选择
本来官网上推荐搭配的版本是这样的https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E,但是通过实践发现2.2.1.release版本的与Hoxton.SR8+2.3.3.RELEASE的搭配并没有什么问题,于是直接选用了最新的springcloud+官网推荐springboot+最新版本springcloud alibaba,短时间测试未发现问题,待以后长周期使用再看。
三、springcloud升级前后区别
因为使用时间较短,现在直观感受到的区别就是语法的规范性要求更严格,比如如下代码原来版本的写法为
Map<String, Object> info = JsonUtil.getObjectMapper().readValue(message, JsonUtil.tf_mso);
升级后的写法变为
Map<String, Object> info = (Map<String, Object>) JsonUtil.getObjectMapper().readValue(message, JsonUtil.tf_mso);
需要强制转换格式后赋值给变量编译才允许通过。
四、springcloud config是否可以与nacos结合使用?
答案是可以,因为种种原因不便于使用nacos提供的配置中心功能,只需要保留原有springcloud config的用法即可。配置文件如下
server:
port: 26050
spring:
application:
name: distribute
cloud:
nacos:
discovery
server-addr:
# sentinel:
# transport:
# #配置Sentin dashboard地址
# dashboard: 192.168.0.238:8080
# port: 8719
# clientIp: 192.168.0.202
# # 取消延迟加载
# eager: true
config:
discovery:
enabled: true
serviceId: config-server
#uri: http://localhost:26030
failFast: true
profile: master
label: 1
retry:
initialInterval: 5000
maxInterval: 20000
maxAttempts: 60
五、nacos及sentinel监控需要引用的pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>