> 技术文档 > 基于nacos和gateway搭建微服务管理平台详细教程

基于nacos和gateway搭建微服务管理平台详细教程


前置说明-安装环境:

java: 1.8
maven: 3.9.9
开发工具:IntelliJ IDEA 2022.2.3 【以下简称idea】

如果cmd命令行输入以下命令查看到有相应输出则表示环境已安装

image.png

第一步:从无到有搭建spring boot2.7.18,并引入spring cloud

方法一:使用 Spring Initializr 初始化项目

Spring Initializr 是一个在线工具,可帮助你快速生成 Spring Boot 项目的基本结构

spring.ioc.jpg

步骤 1:访问 Spring Initializr 网站

打开浏览器,访问 https://start.spring.io/。

步骤 2:配置项目信息

在该页面上,按照以下要求进行配置:

Project:选择 Maven Project 或 Gradle Project,这里以 Maven Project 为例。
Language:选择 Java。
Spring Boot:输入 版本号。
Group:通常是公司或组织的域名倒序,例如 com.example。
Artifact:项目的唯一标识符,例如 demo。
Name:项目名称,默认与 Artifact 相同。
Description:项目描述,可以简单说明项目的用途。
Package name:默认根据 Group 和 Artifact 生成,例如 com.example.demo。
Packaging:选择 Jar。
Java:选择合适的 Java 版本

由于该网站选不到Spring boot2.7.18版本,我将选择用idea搭建一个空的项目进行配置,当然如果非要使用网站生产也可以,下载后解压文件修改对应的版本号即可使用

方法二:使用idea创建空项目

步骤 1:打开idea:选择左上角File-New-Project

image.png

步骤 2:步骤一点完后会出现如图所属弹窗,按弹窗内容选择填写即可完成空项目的搭建

image.png

项目结构说明

image.png

步骤 3:配置 pom.xml 文件

 4.0.0 org.cxm spring-cloud-nacos 1.0-SNAPSHOT  org.springframework.boot spring-boot-starter-parent 2.7.18    1.8 8 8 UTF-8     org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import      junit junit 3.8.1 test   org.springframework.boot spring-boot-starter-web  
更新Maven依赖

image.png

步骤 4:创建主应用类,Main可以删掉

image.png

代码如下
package org.cxm;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringCloudApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudApplication.class,args); }}

步骤 5:创建控制器类

为了方便管理,一般会将每个分支进行文件汇总,如下添加Controller控制层文件夹,所有的控制层文件都放在此文件夹内

image.png

新增控制器类TestController,并添加代码如下

image.png

package org.cxm.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(\"/test\")public class TestController { @GetMapping(\"get\") public String get() { return \"我的第一个项目!!!\"; }}

步骤 6:运行idea,启动项目

image.png

启动后浏览器访问IP:端口【端口默认8080】即可看到控制器类的代码

image.png

至此Spring boot2.7.18并引入Spring cloud完成

第二步:集成spring cloud nacos

Nacos 可以作为服务注册与发现中心以及配置中心使用,下面从添加依赖、配置 Nacos、服务注册与发现、配置管理等方面展开说明。

1、启动 Nacos 服务

首先要确保 Nacos 服务已启动,你可以从 Nacos 官方 GitHub 仓库 下载 Nacos 服务端,下载地址:【发布历史 | Nacos 官网 】点击对应版本号即可下载,解压后在命令行中执行以下命令启动:
Linux下进入到bin目录下执行如下命令,lunix如果开了防火墙的话,需开放两个端口8848,9848【9848 端口:在 Nacos 集群模式下,该端口用于 Nacos 节点之间的 gRPC 通信,主要负责数据同步、心跳检测等操作,以此保证集群中各个节点的数据一致性。】# Linux/Unix/Macsh startup.sh -m standaloneWindows下进入bin目录下cmd执行如下命令,或者编辑startup.cmd文件,找到set MODE=,将内容改为set MODE=\"standalone\",保存后,双击点击startup.cmd即可完成nacos服务端启动# Windowscmd startup.cmd -m standalone

启动完成后浏览器打开链接即可看到nacos服务端: http://localhost:8848/nacos/index.html

image.png

补充:使用源码进行启动-编译-打包(如需对nacos进行定制开发,可以使用源码修改)

2、集成nacos,添加依赖如下

 4.0.0 org.cxm spring-cloud-nacos 1.0-SNAPSHOT  org.springframework.boot spring-boot-starter-parent 2.7.18    1.8 8 8 UTF-8      org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import    com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.0.5.0 pom import       junit junit 3.8.1 test    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config    org.springframework.cloud spring-cloud-starter-bootstrap  

3、配置 Nacos 地址

如图所示添加如下两个配置文件

image.png

application.yml 添加配置如下

server: port: 8081 # 指定服务端口,如果不指定默认就是8080spring: application: name: springCloudNacos # 指定服务名称,项目启动后注册到nacos的名称就是这个

bootstrap.yml 添加配置如下,用于测试nacos配置自动刷新

spring: application: name: springCloudNacos cloud: nacos: #服务注册与发现 discovery: server-addr: http://127.0.0.1:8848 group: DEFAULT_GROUP #默认分组# username: #nacos用户名# password: #nacos密码 #服务配置中心 config: server-addr: http://127.0.0.1:8848 # Nacos服务端地址 group: DEFAULT_GROUP #默认分组 file-extension: yml #配置文件后缀名 refresh-enabled: true #开启自动刷新配置# prefix: #配置文件前缀# username: #nacos用户名# password: #nacos密码#下面配置用于测试nacos的配置自动刷新内容获取common: username: cxm age: 18

启动类修改如下

package org.cxm;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClient //nacos服务注册与发现public class SpringCloudApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudApplication.class,args); }}

修改TestController 文件如下

package org.cxm.Controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;@RestController@RequestMapping(\"/test\")@RefreshScope //主要用于支持配置的动态刷新public class TestController { @Value(\"${common.username}\") private String username; @Value(\"${common.age}\") private Integer age; @GetMapping(\"/get\") public String get() { return \"我的第一个项目!!!\"; } @GetMapping(\"/getMap\") public Map getMap() { Map map = new HashMap(); map.put(\"username\", username); map.put(\"age\", age); return map; }}

启动服务测试

服务启动后可看到日志打出来的配置信息名称和分组

image.png

进入nacos系统可以看到服务已经注册进来了

image.png

浏览器访问刚刚控制层写的接口,可以看到bootstrap.yml配置的信息被获取到了

image.png

4、配置管理

在配置管理 -> 配置列表中创建一个新的配置
Data ID 为 springCloudNacos.yml(Data ID 默认规则为 ${spring.application.name}.${spring.cloud.nacos.config.file-extension}),配置内容如下:

image.png

再次刷新刚才接口可看到输出的内容已从nacos配置中获取,如果继续修改nacos配置文件,则获取的信息还会立马更新

image.png

至此集成spring cloud nacos已经完成

第三步:集成spring cloud gateway网关服务

集成 Spring Cloud Gateway,实现路由转发等功能。整个集成过程主要包括创建项目、添加依赖、配置路由规则、测试等步骤。

1、按照第一步的方法创建一个空项目为spring-cloud-gateway

2、添加pom依赖如下

 4.0.0 org.cxm spring-cloud-gateway 1.0-SNAPSHOT  org.springframework.boot spring-boot-starter-parent 2.7.18    1.8 8 8 UTF-8      org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import    com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.0.5.0 pom import       junit junit 3.8.1 test    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config    org.springframework.cloud spring-cloud-starter-bootstrap    org.springframework.cloud spring-cloud-starter-gateway    org.springframework.cloud spring-cloud-starter-loadbalancer  

3、创建启动类,代码如下,删除Main类

image.png

package org.cxm;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); }}

4、创建yml配置文件

image.png

application.yml内容如下

server: port: 8080spring: application: name: SpringCloudGateway

bootstrap.yml内容如下

spring: application: name: SpringCloudGateway cloud: nacos: #服务注册与发现 discovery: server-addr: http://127.0.0.1:8848 group: DEFAULT_GROUP #默认分组 # username: #nacos用户名 # password: #nacos密码 #服务配置中心 config: server-addr: http://127.0.0.1:8848 # Nacos服务端地址 group: DEFAULT_GROUP #默认分组 file-extension: yml #配置文件后缀名 refresh-enabled: true #开启自动刷新配置 # prefix: #配置文件前缀 # username: #nacos用户名 # password: #nacos密码 gateway: discovery: locator: enabled: true #开启服务发现路由功能,这样 Spring Cloud Gateway 就能依据服务注册中心(这里是 Nacos)里的服务信息自动创建路由规则 routes: - id: springCloudNacos #路由的唯一标识,一般用${spring.application.name} uri: lb://springCloudNacos #目标服务地址,lb://springCloudNacos 里的 lb 代表负载均衡,springCloudNacos 是在 Nacos 注册的服务名,意味着请求会被路由到名为 springCloudNacos 的服务 predicates: - Path=/test/** #路由断言,也就是路由匹配规则。Path=/test/** 表明当请求路径以 /test/ 开头时,该路由规则就会生效
启动SpringCloudGateway服务,进入nacos服务端可以看到网关服务已被注册上去了

image.png

5、创建网关配置

image.png

6、测试之前的接口请求

Spring Cloud Nacos的接口请求

image.png

Spring Cloud Gateway进行接口转发到Spring Cloud Nacos

image.png

至此集成Spring Cloud Gateway完成

补充:给nacos设置用户名密码

1、创建nacos数据库

Nacos 2.x 版本使用数据库来存储用户信息,你需要创建相应的数据库表。以 MySQL 为例,执行 conf/mysql-schema.sql 脚本,该脚本会创建 users、roles、permissions 等表
插入一个用户名:nacos,密码:Nacos@2025!@#$INSERT INTO users(username, password, enabled)VALUES(\'nacos\', \'$2a$10$Jsv69Thm1TtuMnVjnAxufu9EW5YNM6NpELOTrfTmQ2PndGZ4RdxWe\', 1);使用如下代码获取 BCrypt 加密后的密码public static void main(String[] args) { BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); String rawPassword = \"Nacos@2025!@#$\"; String encodedPassword = encoder.encode(rawPassword); System.out.println(encodedPassword); }

2、配置nacos服务端配置信息

在 conf/application.properties 文件中配置数据库连接信息:
#请根据实际情况修改数据库连接 URL、用户名和密码。spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://172.16.132.252:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghaidb.user.0=rootdb.password.0=GH&zgsw@2024# 开启身份验证nacos.core.auth.enabled=true# 指定了服务器身份标识的键。这个键用于标识服务器身份信息的名称nacos.core.auth.server.identity.key=nacos# 指定了服务器身份标识的值。客户端在与 Nacos 服务器进行通信时,可以使用这些信息来验证服务器的身份。nacos.core.auth.server.identity.value=Nacos@2025!@#$### The default token (Base64 String):原始密钥:nacos_2025250_szhsyb_nacos_tokennacos.core.auth.plugin.nacos.token.secret.key=bmFjb3NfMjAyNTI1MF9zemhzeWJfbmFjb3NfdG9rZW4=
【nacos.core.auth.plugin.nacos.token.secret.key=】 配置说明
在 Nacos 配置中,nacos.core.auth.plugin.nacos.token.secret.key 是用于生成和验证 Nacos 认证令牌(Token)的密钥。当你开启了 Nacos 的身份验证功能(通过设置 nacos.core.auth.enabled=true)后,Nacos 会使用这个密钥对用户登录、服务调用等操作生成的 Token 进行加密和解密,以此来保证认证信息的安全性和完整性
注意事项
1、安全性:这个密钥非常关键,因为它关系到 Token 的加密和解密。在生产环境中,要妥善保管这个密钥,避免泄露。建议使用足够复杂且随机的字符串作为密钥,以增强安全性。2、长度要求:虽然没有严格固定的长度限制,但为了保证加密的强度,建议使用较长的字符串。一般来说,至少 32 位及以上的随机字符串是比较合适的。3、Base64 编码:配置时可以直接使用 Base64 编码后的字符串,Nacos 会自动进行解码处理。如果你想修改密钥,生成新的密钥后需要进行 Base64 编码再配置到文件中。4、以下是使用 Java 代码生成随机字符串并进行 Base64 编码的示例:public static void main(String[] args) { String rawKey = \"nacos_2025250_szhsyb_nacos_token\"; // 进行 Base64 编码 String encodedKey = Base64.getEncoder().encodeToString(rawKey.getBytes(StandardCharsets.UTF_8)); System.out.println(\"Encoded Key: \" + encodedKey); }

3、 以上配置完成,重启nacos服务即可

image.png

用户名:nacos密码:Nacos@2025!@#$
后续修改密码可以直接在nacos服务上修改

image.png

小说网盟