spring boot升级spring cloud注意事项

2023-11-08

项目升级,从springboot转成springcloud,记录一些过程中遇到的问题和坑。

一、确定版本和组件选型

版本不兼容会造成很多问题,所以需要根据项目使用的Spring Boot Version确定相关版本。
此处使用的是Spring Boot Version: 2.3.5.RELEASE,参考官网推荐以及支持的稳定版本最终确定各版本如下:
Spring Boot Version: 2.3.5.RELEASE
Spring Cloud Version: Hoxton.SR9
Spring Cloud Alibaba Version:2.2.6.RELEASE

组件选型如下:
1、服务注册与发现:Nacos 1.4.2
2、配置中心:Nacos 1.4.2
3、网关:Spring Cloud Gateway 2.2.6 RELEASE
4、服务调用和负载均衡:OpenFeign 2.2.6 RELEASE
5、服务降级:Sentinel 1.8.1

如何确定版本?

Git版本说明网址:(组件版本以及依赖关系)
在这里插入图片描述

Spring Cloud Version: Hoxton.SR9 官方文档
在这里插入图片描述

ps:如果页面上没有展示你要找的版本,可以把后缀版本换成你要找的。
Spring Cloud 官网地址
spring-cloud-alibaba项目git网址

如何确定组件选型?

根据项目需求,确定相关组件的选择,主要从以下几点入手:
1、兼容性问题(选择合适自身项目的组件,不一定是越新越好)
2、官方仍升级与维护、社区活跃度(便于后续问题的查找与解决)
3、性能与特殊需求(如有要求可针对性选择)
具体可以先了解一下各个组件的功能与差异、侧重点等,可以参考如下文章 :
spring cloud 组件使用
Spring Cloud笔记(2) 组件的搭配和选择

二、父工程

原涉及业务逻辑相关(需要拆分代码的)暂时可以先不做,Spring Cloud下有多个微服务,首先需要新建maven父工程,无需包含src文件等,保留pom文件,主要用来聚合各个子模块。原业务逻辑整体作为一个微服务子模块,后续可以根据需要拆分成各个子模块,例如:定时任务模块、数据库实体类模块、公共方法工具类模块、业务区分模块(根据需要:例 用户模块、商品模块等),登录授权模块、网关模块、注册中心、配置中心等。父工程中只保留pom文件即可,此处注意dependencyManagement和dependencies标签的区别,dependencyManagement并没有真正引入依赖,只是在父工程中做了声明,真正引入需要各个子项目显式声明引入。

具体区别可参考此文章 dependencyManagement与dependencies的区别

以下各个微服务搭建具体流程可以自行搜索更为详细的资料,本文简单做流程记录,我是参考b站视频搭建初步各组件demo,后续再慢慢完善各个细节。

三、nacos作为注册中心与配置中心

单机版

1、下载nacos服务端并解压
此处选择版本为1.4.2,nacos 1.4.2 网址
选择其他版本可自行查找下载,nacos git 网址
windows环境下下载nacos-server-1.4.2.zip文件

2、解压后运行startup.cmd。
使用windows控制台启动,命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
或者修改脚本文件startup.cmd的启动模式为单机模式:
//set MODE=”standalone”
不修改默认是集群模式 set MODE=”cluster”

3、服务启动后访问:http://localhost:8848/nacos 用户名和密码都是nacos

持久化到数据库

1、在开始搭建集群之前,需要先将Nacos的默认数据库derby切换成mysql。
首先启动本机mysql,创建nacos_config数据库,并在nacos_config数据库下执行conf目录下的nacos-mysql.sql脚本(完成数据库创建及表创建)

2、进入conf目录下,打开application.properties,修改如下参数:

spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

注:数据库端口及账号密码换成自己的

集群版

1、脚本文件startup.cmd的启动模式为集群模式:set MODE=”cluster” (默认即是集群模式)

2、开启持久化到数据库。

3、将 cluster.conf.example文件重命名为 cluster.conf,打开文件并将集群中所有节点的ip:port写入。

4、集群占用内存较大,在一台电脑启动集群模式建议修改默认内存配置。否则可能再启动多个时会因为内存不足启动失败。参数含义:
-Xms: 设定程序启动时占用内存大小
-Xmx: 设定程序运行期间最大可占用的内存大小
-Xmn:新生代大小

5、复制nacos文件三份,分别修改application.properties 各自绑定端口,或者启动时添加端口参数

6、配置nginx实现负载均衡,修改nginx/conf 路径下的 nginx.conf 文件

7、先启动 nginx,再依次启动3333、4444、5555的 nacos 节点(此处3333、4444、5555 是不同的nacos端口)
服务启动后访问:127.0.0.1:1111/nacos 用户名和密码都是nacos,查看集群管理结点列表(此处1111 是nginx配置的对外端口)

nacos集群搭建参考博客:Nacos集群的搭建过程详解
nacos注册中心参考文章:Nacos 注册中心实战
具体使用可参考:nacos文档

注意事项:
1、配置文件必须是bootstrap.properties或者bootstrap.yml,如果配置application.properties或者application.yml会导致加载不到配置。
2、@RefreshScope实现自动刷新,此注解主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。
3、nacos配置中心文件命名规则:server-name+profile+文件格式 ,例如:nacos-config-client-dev.yaml ,注意yaml不要写成yml。

四、gateway网关

网关这块主要注意路径匹配规则配置,还有注意跨域相关配置,否则搭建完有可能会报不允许跨域访问的错误。以下仅供参考

import org.springframework.web.cors.CorsConfigurationSource; //导入依赖的package包/类
private CorsConfigurationSource corsConfiguration() {
    	CorsConfigurationSource source= new UrlBasedCorsConfigurationSource();
    	CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");//同源配置,*表示任何请求都视为同源,若需指定ip和端口可修改例 "localhost:8080",以","分隔
        corsConfiguration.addAllowedHeader("*");//允许哪些header,本初使用token,可将*替换成token
        corsConfiguration.addAllowedMethod("*");//允许的请求方法,例如GET、POST
        corsConfiguration.setMaxAge(3600L);
        corsConfiguration.setAllowCredentials(true);
        ((UrlBasedCorsConfigurationSource) source).registerCorsConfiguration("/**", corsConfiguration);
        return source;
}

升级此处还涉及到了SpringCloud Gateway + Spring Security 整合,需要注意的是Spring Cloud Gateway中使用的是Spring-Webflux,所以不能用Spring MVC的那套安全配置。
Reactor与传统MVC配置对应如图:
Reactor与传统MVC配置对应
更为具体的实践可参考这篇文章 SpringCloud Gateway + Spring Security

五、sentinel熔断限流

1、Dashboard的部署,下载 sentinel 服务端jar包,此处使用版本1.8.1。
下载地址:sentinel 1.8.1
具体使用可参考:Sentinel项目git网址 中文文档

2、启动
前提:java8环境ok、8080端口不能被占用(默认8080端口,可以指定端口启动)
进入下载好的目录,打开cmd,输入命令

java -jar -Dserver.port=7080 sentinel-dashboard-1.8.1.jar

启动Sentinel成功后,登录localhost:7080 进入登录页面,默认账号密码都是sentinel。
注意:Sentinel采用懒加载模式,访问路径一次后,才能在控制台上看到结果。

3、持久化配置,此处使用的是结合 nacos 持久化到数据库。需要引入依赖,添加配置。

4、添加Nacos业务规则配置,文件名称即为对应的服务应用名称。
例限流json配置:

[
    {
         "resource": "/byUrl",
         "limitApp": "default",
         "grade":   1,
         "count":   1,
         "strategy": 0,
         "controlBehavior": 0,
         "clusterMode": false    
    }
]

resource:资源名称
limitApp:来源应用
grade:阈值类型,0代表线程数,1代表QPS
count:单击阈值
strategy:流控模式,0代表直接,1代表关联,2代表链路
controlBehavior:流控效果,0代表快速失败,1代表Warm Up,2代表排队等待
clusterMode:是否集群

例降级json配置:

[
    {
         "resource": "/byUrl",
         "grade":   2,
         "count":   2,
         "minRequestAmount": 3,
         "timeWindow": 3,
         "statIntervalMs": 6000    
    }
]

图片来自官方文档:
在这里插入图片描述
注意配置降级的时候,需要改变配置文件中的rule-type,否则对不上不会生效。
在这里插入图片描述
在这里插入图片描述

Sentinel搭建参考博客:SpringCloud Alibaba Sentinel(史上最详细)

六、引入openfeign实现远程调用

1、get请求
非restful风格,每个入参都要添加注解@RequestParam(“userid”)
restful风格,每个入参都要添加注解@PathVariable(“userid”)

FeignClient接口的方法上必须使用注解,如果FeignClient传递的参数名与服务提供方的Controller方法的参数名不一样, 需要在服务提供方, 使用@RequestParam进行映射
2、post请求
@RequestParam(“id”)
@RequestBody User user

要求: FeignClient接口的方法的javaBean参数, 添加@RequestBody, 要求服务的提供方的方法上也要加@RequestBody注解
注意: 一个方法上只能有一个@RequestBody注解, 但是可以有多个@RequestParam注解

如果找不到方法调用,仔细检查路径是否一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring boot升级spring cloud注意事项 的相关文章

随机推荐

  • 在ESP32/ESP8266上使用MicroPython利用MQTT发布BME280传感器数据(温度,湿度和压力)

    了解如何使用MicroPython对ESP32或ESP8266板进行编程 以通过MQTT将BME280传感器读数 温度 湿度和压力 发布到支持MQTT或任何MQTT客户端的任何平台 例如 我们将传感器读数发布到Node RED仪表板 注意
  • 神州交换机路由器AC和AP基本配置

    交换机部分 两层和三层交换机清除所有配置的命令 Set default 清除配置 Write 保存 Reload 重启 交换机打开网站管理 http 两层 config ip http server config Web user xxx
  • 51单片机 LCD1602

    LCD1602 H ifndef LCD1602 H define LCD1602 H 用户调用函数 void LCD Init void LCD ShowChar unsigned char Line unsigned char Colu
  • 【解决方案】PicGo图片上传失败问题【少走弯路】

    解决方案 PicGo图片上传失败问题 少走弯路 1 检查Server设置 选择PicGo设置 选择设置Server 确认设置监听端口为 36677 如果没有问题的话可以尝试关闭 退出APP 再开启Server 未能解决再继续操作 2 检查阿
  • Android:手把手带你了解实用的Android Jetpack

    转自 https blog csdn net carson ho article details 104243841 前言 在2018年 Google I O 大会上发布了一系列辅助Android开发者开发的实用工具集合 Jetpack 今
  • Unity制作简单动画效果

    需求 制作一段门旋转的动画 效果如下 解决办法 1 在Unity中点击Window gt Animation gt Animation 调出Animation面板 如下 2 为了让门的轴心在门边上以便于制作门绕门边旋转的效果 需要先新建一个
  • Rust交叉编译开发环境的搭建

    为嵌入式开发引入新的编程语言 对于嵌入式系统软件和应用软件的开发而言 编程语言的重要性次于整体的软件架构设计的重要性 不过仍有必要谨慎地选择编程语言 因为这涉及开发效率 软件性能 以及团队成员的技术能力 譬如 若整个嵌入式软件的绝大数组件是
  • 蓝桥杯 分数统计---递归

    题目 1500 蓝桥杯 算法提高VIP 分数统计 时间限制 1Sec 内存限制 128MB 提交 1541 解决 727 题目描述 给定一个百分制成绩T 将其划分为如下五个等级之一 90100为A 8089为B 7079为C 6069为D
  • Spring MVC参数的传递与接收

    SpringMVC主要做的就两方面的操作 在Controller接收从jsp传递过来的数据 把Controller的数据传递到jsp页面 将Controller里边的数据传到jsp 其返回值有三种类型 ModelAndView void S
  • Swift3.0学习之CollectionView的简单使用

    1 设置layout let layout UICollectionViewFlowLayout layout itemSize CGSize width 60 height 80 设置item尺寸 layout minimumLineSp
  • Python学习笔记(零)————Python简介及基础

    目录 1 查看 Python 版本 2 脚本文件 3 Python3 简介 4 Python 发展历史 5 Python 特点 6 Python 应用 7 Python环境搭建 1 查看 Python 版本 我们可以在命令窗口 Window
  • Docker入门(安装、换阿里源及配置阿里云镜像加速)

    文章目录 一 Docker 概述 1 1 Docker 为什么出现 1 2 Docker 的历史 1 3 聊聊 Docker 1 4 Docker 能干嘛 二 Docker 安装 2 1 Docker 的基本组成 2 2 安装 Docker
  • warning: array subscript is above array bounds

    问题描述 warning array subscript is above array bounds Warray bounds 数组下标使用越界 需检查数组的使用 下标是否正确 warning pointer targets in pas
  • 网页链接区块链wallet_WAX云钱包解决了区块链的最后难题

    点击蓝字 关注我们 区块链的最后的难题已被解决 我用过很多区块链 dApps 有些很神奇 有些则不然 但是几乎所有这些dApp都是有限制的 因为当新用户上线时 很难和这些应用程序磨合得好 现在登录 dApp 就像用制作复杂的鲁布 戈德堡机械
  • Oracle安装教程及PL/SQL Developer下载安装及使用

    作为按照各种教程安装了5 6次Oracle数据库的人来说 不得不把之前踩过的坑都总结一下 1 首先 请下载Oracle 11g和plsql PL SQL Developer 这里给出百度云网盘下载链接 只需要下载解压就行了 链接 https
  • 数字图像处理之低通滤波器实现原理及方法(Matlab)

    1 傅里叶变换与频域 在之前的文中 我们已经进行过一些基本的图像处理 比如 使用低通滤波可以将图像模糊 也有些许降噪的作用 这些都是在空间域内进行的滤波处理 这个处理主要是依靠卷积来进行计算的 首先 从连续的一维卷积入手 如下所示 将上式进
  • Run-Time Check Failure #0 错误

    使用VS 遇到过一个错误 如下图 文字描述是这样的 Run Time Check Failure 0 The value of ESP was not properly saved across a function call This i
  • 智能优化算法 — 蜣螂优化算法(Dung beetle optimizer,DBO)

    引言 小时候 蜣螂还是比较多见的 还顽皮地将粪球给它弄走 或者给它来点障碍 现在放牛的几乎看不到了 蜣螂没东西可推了 也慢慢从我们的视线中消失了 DBO介绍 2022年11月27日 东华大学沈波教授团队 继麻雀搜索算法 Sparrow Se
  • 关于Lab5 github上传后文件名大小写不变

    遇到的问题 由于checkstyle等工具检查出本地包名不符合规范 修改了其大小写之后 重新上传到github上发现包内类中package后包名已经改变 但是文件夹名并没有改变 尝试解决一 执行git config global core
  • spring boot升级spring cloud注意事项

    项目升级 从springboot转成springcloud 记录一些过程中遇到的问题和坑 一 确定版本和组件选型 版本不兼容会造成很多问题 所以需要根据项目使用的Spring Boot Version确定相关版本 此处使用的是Spring