Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(一)

Ruoyi-cloud 项目学习

  • 一、项目环境搭建与启动
    • 1.1 nacos安装部署
      • 1.1.1 nacos安装、启动
      • 1.1.2 nacos部署
    • 1.2 seata安装部署
    • 1.3 后端部署与运行
      • 1.3.1 ruoyi-modules-file模块运行报错
    • 1.4 nginx安装、部署、配置与启动
    • 1.5 redis安装与部署
    • 1.6 前段框架知识
    • 1.7 项目启动
    • 1.8 参考
  • 二、技术选型与框架理解
    • 2.1 技术选型
    • 2.2 框架理解
      • 2.2.1 Spring Boot框架
      • 2.2.2 Spring Cloud框架
        • 2.2.2.1 服务注册与发现
        • 2.2.2.2 配置中心
        • 2.2.2.3 服务网关
        • 2.2.2.4 智能路由
        • 2.2.2.5 负载均衡
        • 2.2.2.6 断路器
        • 2.2.2.7 监控跟踪
        • 2.2.2.8 分布式消息队列

一、项目环境搭建与启动

参考视频或文章链接
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就有华为的贡献。

参考文章
Spring Cloud - offical website
Spring Boot Vs Spring cloud
《一篇文章搞懂 Spring Cloud 是什么》
《终于有阿里资深架构师讲通Springcloud与Springboot的关系了》
哈喽沃德先生 —— 博客主页
《一文带您读懂什么是Spring Cloud与Spring Cloud Alibaba》- 知乎
《最详细说明spring cloud和Spring Cloud Alibaba的联系和区别》- CSDN
【一张图完整说明微服务基本概念和核心思想】 - bilibili
2.2.2.1 服务注册与发现

《注册中心 | RuoYi》

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 分布式消息队列

你可能感兴趣的:(Java技术栈,java,微服务,spring,cloud)