附录一:Nacos 微服务 Demo 实例

felix.shao2025-02-18

附录一:Nacos 微服务 Demo 实例

1 概述

 以微服务实例项目进行知识点串联,后续再对技术进行发散学习。环境如下。

 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 启动器open in new window进行理解。
      • 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 仓库。

3 新增注册中心服务

 创建注册中心服务。生产环境可以使用官方的集群,本地开发将服务本地用 Java 可启动,方便开发。

知识点如下

  • 安装 nacos。
  • Java nacos 集成。
  • Nacos 加密。
  • 配置文件加解密。

3.1 安装 Nacos Server

 使用:nacos-server-2.0.3 版本。
 可以参考 Nacos 官网快速开始open in new window,我们使用编译包安装。

  • 通过 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 实现配置文件加解密。
 可参考下面内容理解。

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 知识点简述

 以下是涉及功能简述,有些功能点我们会简单展开讨论。

5.1.1 用户权限设计

 见 数据库设计表open in new window

5.1.2 MyBatis-Plus 使用

 这里简单介绍使用的相关技术点,完整内容详见官网。MyBatis-Plus 官网open in new window

  • 自动生成代码。自动生成后按照 ActiveRecord 插件改下 Entity。代码见 com.psyscloud.psys.codegen.PsysUpmsCodeGenMybatisPlusUtil

6 新增 psys-auth 模块

 新增认证授权模块。

知识点如下

  • Spring Cloud 整合 Spring Security OAuth2。
  • auth 模块集成。

6.1 知识点简述

 以下是涉及功能简述,有些功能点我们会简单展开讨论。

6.2 Spring Cloud 整合 Spring Security OAuth2

 使用了 security 和 oauth2 处理认证。
 简单集成样例参考 Spring Cloud Oauth2 快速入门open in new window。  样例代码参考 [psys-security-demo],样例代码具体实现了下面的功能。

  • 基于内存 + token 方式。
  • 二 基于内存 + Jwt 令牌方式。
  • 三 基于数据库加载用户信息 + Jwt 方式。
  • 四 token 添加自定义信息。

 以下资料也可参考参考。

6.2.1 登录 token 生成过程

6.2.2 请求过程 token 校验过程

7 新增 psys-gateway 模块

 新增网关模块。

附录一 通用知识点

参考文献

Last Updated 2/18/2025, 5:05:12 PM