附录一:Nacos 微服务 Demo 实例
附录一:Nacos 微服务 Demo 实例
1 概述
以微服务实例项目进行知识点串联,后续再对技术进行发散学习。环境如下。
- Window 11。
- Jdk 8。
- psys 源码。
hosts 配置如下。
192.168.37.100 psys-mysql
192.168.37.100 psys-redis
127.0.0.1 psys-register
127.0.0.1 psys-gateway
1.1 一些开发小技巧
如下。
- Hutool 的构建树工具类。
1.2 待整理功能列表
- 1 psys。
- 1.1 配置文件处理器。
- 1.2 docker 打包。
- 1.3 动态数据源。
- 1.4 xxl-job。
- 1.5 工作流。
- 1.6 RefreshCode 不生效。
- 2 psys-upms。
- 2.1 mybatis-plus 使用(OK)。
- 2.2 动态路由与灰度路由。
- 2.3 熔断降级。
- 2.4 日志。
- 2.5 缓存。
- 2.6 多租户。
- 2.7 多数据源。
- 2.8 导入导出。
- 3 psys-auth。
- 3.1 认证。
- 3.2 自定义 Endpoints。feign 监控。
- 3.3 feign 自动配置功能,部分还未使用到。
- 4 pys-visual。
- 4.1 psys-code 代码自动生成。
- 5 gateway
- 5.1 演示环境过滤。
2 创建 psys。
创建 psys
,其为父 pom,约定项目相关的依赖,具体见代码。 以下是涉及功能简述。
- 1 功能要点。
- 1.1 创建父 pom,约定项目依赖。
- 1.1.1 bootstrap 启动器。注意配置的加载是有优先级的,可参考 bootstrap 启动器进行理解。
- 1.1.2 jasypt、nacos 加密。
- 1.1.3 actuator。监控及监控客户端。
- 1.1.4 通用依赖。如 spring-cloud、lombok、test 依赖。
- 1.2 创建 common ,含公共版本定义。
- 1.2.1 数据库依赖。如 mybatis-plus、jdbc、druid。
- 1.2.2 通用依赖。如 hutool。
- 1.2.3 国际化。
- 1.2.4 pom 配置 maven 仓库。
- 1.1 创建父 pom,约定项目依赖。
3 新增注册中心服务
创建注册中心服务。生产环境可以使用官方的集群,本地开发将服务本地用 Java 可启动,方便开发。
知识点如下
- 安装 nacos。
- Java nacos 集成。
- Nacos 加密。
- 配置文件加解密。
3.1 安装 Nacos Server
使用:nacos-server-2.0.3 版本。
可以参考 Nacos 官网快速开始,我们使用编译包安装。
- 通过 github 下载
nacos-server-2.0.3.zip
,解压nacos-server-2.0.3.zip
。 - 安装 Mysql 8。新建 nacos 配置的数据库
create database nacos_config;
,然后执行nacos\conf\nacos-mysql.sql
脚本。 - 修改配置
nacos\conf\application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
- 启动 nacos,如 Window 执行
startup -m standalone
,注意先单机启动,集群启动会报错。 - 访问 http://192.168.37.1:8848/nacos/index.html,用户名/密码为 nocos/nacos。
3.2 创建 psys-register
Spring Cloud 整合运行 Nacos。
开发时,我们可以像启动 Java 服务一样启动 Nacos。操作步骤主要如下。
数据库安装逻辑同上。
- 通过 github 下载
nacos-server-2.0.3.zip
,解压nacos-server-2.0.3.zip
。 - 安装 Mysql 8。新建 nacos 配置的数据库
create database psys_nacos_config;
,然后执行nacos\conf\nacos-mysql.sql
脚本。
源码以 Java 服务启动。
- 通过 Github 下载 Nacos 的源码。
- 在 psys-parent 下创建空的 psys-register。
- 复制 console 下 pom 依赖、java 代码和前端资源到 psys-nacos 中。
- 通过 System.setProperty 设置一些启动参数,如单机启动,因为改配置没有用。
- 访问 http://192.168.37.1:8848/nacos/index.html,用户名/密码为 nocos/nacos。
TIP
此时监控生效了,但是访问不了 http://192.168.37.1:8848/nacos/actuator/info
,应该是这里 nacos 与 actuator 结合哪里访问权限有问题,后续再跟,或用其他服务再研究监控。
3.3 知识点探讨
这里简单的结合实例了解下,如需深入还需开专题研究。
3.3.1 Nacos 加密
加密工具方法为 com.alibaba.nacos.console.utils.PasswordEncoderUtil.encode
,传入密码明文,即可获取加密后的密文,默认使用 Jasypt 实现配置文件加解密。
可参考下面内容理解。
3.3.2 配置文件加解密
默认使用 jasypt 实现配置文件加解密。
可参考下面内容理解。
- Github - jasypt-spring-boot。
- [Jasypt 测试] 见代码
com.alibaba.nacos.console.utils.JasyptTest
。
4 新增一个微服务
知识点如下
- 使用 Nacos 配置新增一个微服务。
具体代码见 psys-hello-world
,一下是一些步骤。
先简单新增一个 Hello World 应用,能读取到 Nacos 配置即可。
新增 psys-hello-world
模块项目,并按照下面步骤操作。
新建 bootstrap.yml
。
server:
port: 8199
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:psys-register}:${NACOS_PORT:8848}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yml
shared-configs:
- application-hello-world-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
active: @profiles.active@
修改 pom.xml
,新增以下依赖。
<!-- 注册中心客户端 -->
<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-nacos-config</artifactId>
</dependency>
<!-- web 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- undertow 容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
在 Nacos web 页面中新增如下配置。
data id: application-hello-world-dev.yml
group: DEFAULT_GROUP
配置格式: yaml
配置内容: msgInfo: hello world
新增以下代码,启动应用后访问 http://127.0.0.1:8199/msgInfo
。
@EnableDiscoveryClient
@SpringBootApplication
public class PsysHelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(PsysHelloWorldApplication.class, args);
}
@RestController
class HelloWorldController {
@Value("${msgInfo}")
private String msgInfo;
// http://192.168.37.1:3000/msgInfo
@GetMapping("msgInfo")
public String getMsg(){
return msgInfo;
}
}
}
5 新增 psys-upms 模块
新增用户权限管理模块。
知识点如下
- 用户权限设计。
- MyBatis-Plus 使用。
5.1 知识点简述
以下是涉及功能简述,有些功能点我们会简单展开讨论。
- 1 MyBatis-Plus 使用。含自动代码生成等。
- 2 多种方式导入配置文件。
5.1.1 用户权限设计
见 数据库设计表。
5.1.2 MyBatis-Plus 使用
这里简单介绍使用的相关技术点,完整内容详见官网。MyBatis-Plus 官网。
- 自动生成代码。自动生成后按照 ActiveRecord 插件改下 Entity。代码见
com.psyscloud.psys.codegen.PsysUpmsCodeGenMybatisPlusUtil
6 新增 psys-auth 模块
新增认证授权模块。
知识点如下
- Spring Cloud 整合 Spring Security OAuth2。
- auth 模块集成。
6.1 知识点简述
以下是涉及功能简述,有些功能点我们会简单展开讨论。
- 1 feign 集成。
- 1.1 Spring Cloud 中 Feign 的基本使用。
- 1.2 feign 自动配置功能。
- 1.3 FeignClient 详解。
6.2 Spring Cloud 整合 Spring Security OAuth2
使用了 security 和 oauth2 处理认证。
简单集成样例参考 Spring Cloud Oauth2 快速入门。 样例代码参考 [psys-security-demo],样例代码具体实现了下面的功能。
- 基于内存 + token 方式。
- 二 基于内存 + Jwt 令牌方式。
- 三 基于数据库加载用户信息 + Jwt 方式。
- 四 token 添加自定义信息。
以下资料也可参考参考。
6.2.1 登录 token 生成过程
6.2.2 请求过程 token 校验过程
7 新增 psys-gateway 模块
新增网关模块。