Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(一)
Ruoyi-cloud 项目学习
一、项目环境搭建与启动
参考视频或文章链接 |
---|
RuoYi-Cloud官方文档 |
《若依框架讲解-微服务版》- bilibili |
How To Install DBeaver Universal Database Tool in Linux |
请参考官方文档进行环境搭建,这里只记录遇到的零散问题。
1.1 nacos安装部署
1.1.1 nacos安装、启动
安装nacos,并使用bash startup.sh -m standalone
单机模式启动后,访问 http://127.0.0.1:8848/nacos/
,我发现没有登录界面即可登录nacos,也就是说,没有鉴权我就进入了nacos,原因是我目前使用的是nacos-2.3.0,“Nacos自2.2.2版本开始,在未开启鉴权时,默认控制台将不需要登录即可访问”,具体说明可见官方文档,注意是中文文档,有个规律,外国人开发的项目优先看英文文档,中国人开发的项目优先看中文文档,因为更新更及时,如果中国人开发的项目更新中文文档都不及时,反倒更优先更新“程序员的第一母语——英语”,那就说明这项目压根就不打算面向国内程序员。停止nacos的命令是sh shutdown.sh
。
1.1.2 nacos部署
nacos支持三种部署模式:
单机模式 - 用于测试和单机试用。
集群模式 - 用于生产环境,确保高可用。
多集群模式 - 用于多数据中心场景。
ruoyi项目默认使用单机模式
1.2 seata安装部署
RuoYi可以集成seata分布式事务
1.3 后端部署与运行
工程文件的打包是用/bin/package.bat
文件完成的,但我使用的是Ubuntu
系统,所以要将内容转换成shell
文件才能执行,网络上有现成的执行转换任务的工具,直接拿来用,也可以直接借助于大模型,转换规则放在参考文章里了,但没人愿意手敲,我用的是大模型,后面遇到了更好更直接的工具再放到文章里。
REM package.bat, bat文件中, 注释符号为REM
@echo off REM 关闭命令回显功能,在执行后续的命令时,不显示命令本身。
echo. REM 输出一个空行
echo [信息] 打包Web工程,生成war/jar包文件。
echo.
%~d0 REM 获取当前批处理文件所在目录的驱动器号
cd %~dp0 REM 改变当前工作目录到批处理文件所在目录
cd ..
call mvn clean package -Dmaven.test.skip=true
pause
这是转换后的package.sh
文件,执行后就会在各ruoyi-xxx
模块下的/target
目录,生成该模块对应的jar
包
#!/bin/bash
#package.sh
echo "[信息] 打包Web工程,生成war/jar包文件。"
# $0 是 Bash shell 中的一个特殊变量,表示当前正在执行的shell脚本的名称
# dirname 是一个 Bash shell 内置命令,用于返回指定文件或目录的父目录名称。
cd "$(dirname "$0")" || exit
cd ..
mvn clean package -Dmaven.test.skip=true
启动各个模块前,先要启动nacos,启动方法请往上翻。
1.3.1 ruoyi-modules-file模块运行报错
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'fdfs.domain' in value "${fdfs.domain}"
,解决方法请看参考文章链接,配置nacos,所以并不是简单的把nacos启动了,就完事了。搜索fdfs
,看到,需要在nacos下建立一份ruoyi-file-dev.yml
,根据ry-config
数据库下config_info
表的字段,data_id为ruoyi-file-dev.yml
,group_id为DEFAULT_GROUP
即可,
参考文章链接 |
---|
《分布式事务》- Ruoyi官方文档 |
1.4 nginx安装、部署、配置与启动
1.5 redis安装与部署
见参考文章
1.6 前段框架知识
npm:node.js的包管理工具,用于统一管理我们前端项目中需要用到的包、插件、工具、命令等,便于开发和维护。
ES6:Javascript的新版本,ECMAScript6的简称。利用ES6我们可以简化我们的JS代码,同时利用其提供的强大功能来快速实现JS逻辑。
vue-cli:Vue的脚手架工具,用于自动生成Vue项目的目录及文件。
vue-router: Vue提供的前端路由工具,利用其我们实现页面的路由控制,局部刷新及按需加载,构建单页应用,实现前后端分离。
vuex:Vue提供的状态管理工具,用于统一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象。
element-ui:基于MVVM框架Vue开源出来的一套前端ui组件。
1.7 项目启动
Spring-Cloud是一个微服务框架,什么是微服务(Microservices)?微服务由许多较小的,松散耦合的服务组成一个应用程序,与大型,紧密耦合的应用程序的整体方法相反。比如一个党支部达到一定人数时,为方便活动,就会拆分成一支部,二支部,这样分开活动更为方便,但整体仍同属一个组织架构,天下最基本的道理其实就这么多,只是变化无穷。所以只需要将各个模块的jar
包或war
包启动即可,启动脚本在项目的/bin
目录下。
1.8 参考
参考文章 |
---|
《Nacos-v2 下载、安装并使用》 |
《Nacos-v2 用户指南-权限认证》 |
《Nacos-v2 部署手册》 |
《Seata 是什么?》 |
Rules of Converting DOS Batch Files to Shell Scripts |
Nginx中文官网 |
《Redis 安装》- 菜鸟教程 |
Microservices - Wikipedia |
二、技术选型与框架理解
2.1 技术选型
技术栈 | 选型 |
---|---|
系统环境 | Java EE 8 Servlet 3.0 Apache Maven 3 |
主框架 | Spring Boot 2.3.x Spring Cloud Hoxton.SR9 Spring Framework 5.2.x Spring Security 5.2.x |
持久层 | Apache MyBatis 3.5.x Hibernate Validation 6.0.x Alibaba Druid 1.2.x |
视图层 | Vue 2.6.x Axios 0.21.0 Element 2.14.x |
2.2 框架理解
2.2.1 Spring Boot框架
参考文章 |
---|
Spring Boot - offical website |
2.2.2 Spring Cloud框架
Spring Cloud是一系列框架的有序集合。看到Spring Cloud与Spring Boot,一定要搞清楚这两个框架到底有什么区别,面试的时候大概率肯定会问。
Question 1: Spring Cloud与Spring Boot这两个框架到底有什么区别?
(1) Spring Boot 是 Spring的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务;Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
(2) Spring Boot专注于快速、方便集成的单个个体;Spring Cloud是关注全局的服务治理框架;
(3) Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置;Spring Cloud很大的一部分是基于Spring Boot来实现。
(4) Spring Boot可以离开Spring Cloud独立使用开发项目,但是SpringCloud离不开Spring Boot,属于依赖的关系。
Question 2: Spring Cloud与Spring Cloud Alibaba这两个框架到底又有什么区别?
搞懂了上面那个问题,这个问题又需要回应。我先说说我自己的理解,再把综合了其它文章的答案贴到下面,我的理解是:“微服务可以理解为一套技术标准,你得满足服务注册与发现、配置中心、服务网关等特性,但不同厂家有不同的实现标准,官方的Spring Cloud有自己的一套组件去实现这些功能(可能是从开源社区拿过来用或其它组织贡献的),国外的Netflix有它的Spring Cloud Netflix下的一系列组件,国内的阿里有Spring Cloud Alibaba下的一系列组件”。
(1) 组件来源: Spring Cloud是一套微服务解决方案,它集成了Netflix的组件如Eureka、Ribbon、Feign等,为开发者提供了一整套微服务开发工具和框架。而Spring Cloud Alibaba是Spring Cloud的扩展组件,它集成了阿里巴巴的一些开源组件,包括但不限于Nacos(一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台),Sentinel(面向分布式服务架构的流量控制产品)和RocketMQ。
(2)功能特点: Spring Cloud Alibaba提供了一些阿里巴巴的开源组件,以便于开发者更方便地使用这些组件来开发分布式应用服务。例如,Spring Cloud Alibaba Nacos可以用于服务发现和配置管理,而Spring Cloud Alibaba Sentinel则可以提供流量控制、熔断降级、系统负载保护等功能。
(3)关系: Spring Cloud Alibaba是阿里巴巴出品的Spring Cloud第二代实现标准,它是阿里巴巴公司对微服务的实践总结出的,已经在业界广泛使用。总的来说,Spring Cloud Alibaba是Spring Cloud的子项目,符合Spring Cloud的标准。
—— 来自星火大模型的回答
从这里可以看出阿里系的战略布局,开发自己的一套技术架构并加入Spring生态,从而得到更大面积的推广,让更多的受众群体离不开Spring Cloud Alibaba,成为阿里系产品的使用者,并发展成潜在的用户,这一招战略十分精妙,华为的战略与之类似,华为也在推广它自己的技术体系到主流生态中,PyTorch就有华为的贡献。
2.2.2.1 服务注册与发现
2.2.2.2 配置中心
配置文件加载的优先级(由高到低)bootstrap.properties ->bootstrap.yml -> application.properties -> application.yml
见《配置中心 | RuoYi》
2.2.2.3 服务网关
2.2.2.4 智能路由
2.2.2.5 负载均衡
2.2.2.6 断路器
2.2.2.7 监控跟踪
2.2.2.8 分布式消息队列
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!