当前位置: 首页 > news >正文

基于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 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.cxm</groupId><artifactId>spring-cloud-nacos</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
更新Maven依赖

image.png

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

image.png

代码如下
package org.cxm;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public 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/Mac
sh startup.sh -m standaloneWindows下进入bin目录下cmd执行如下命令,或者编辑startup.cmd文件,找到set MODE=,将内容改为set MODE="standalone",保存后,双击点击startup.cmd即可完成nacos服务端启动# Windows
cmd startup.cmd -m standalone

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

image.png

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

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.cxm</groupId><artifactId>spring-cloud-nacos</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><!-- spring-cloud相关依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba 相关依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.5.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 测试依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- Spring Cloud Nacos Discovery 依赖 用于服务注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Spring Cloud Nacos Config 依赖 用于配置配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- spring-cloud-starter-bootstrap 解析bootstrap.yml文件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies>
</project>

3、配置 Nacos 地址

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

image.png

application.yml 添加配置如下

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

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

spring:application:name: springCloudNacoscloud:nacos:#服务注册与发现discovery:server-addr: http://127.0.0.1:8848group: 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: cxmage: 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<String, Object> getMap() {Map<String, Object> 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依赖如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.cxm</groupId><artifactId>spring-cloud-gateway</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><!-- spring-cloud相关依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba 相关依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.5.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 测试依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- Spring Cloud Nacos Discovery 依赖 用于服务注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Spring Cloud Nacos Config 依赖 用于配置配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- spring-cloud-starter-bootstrap 解析bootstrap.yml文件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!-- Spring Cloud Gateway网关,实现路由转发等 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- spring-cloud-starter-loadbalancer 负载均衡组件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
</project>

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

image.png

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

4、创建yml配置文件

image.png

application.yml内容如下

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

bootstrap.yml内容如下

spring:application:name: SpringCloudGatewaycloud:nacos:#服务注册与发现discovery:server-addr: http://127.0.0.1:8848group: 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=mysql
db.num=1
db.url.0=jdbc:mysql://172.16.132.252:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.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_token
nacos.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

相关文章:

  • 安宝特案例丨突破传统手术室,Vuzix AR 眼镜圆满助力全膝关节置换术
  • 【力扣 中等 C】912. 排序数组
  • 高级网络中间人攻击与加密防护机制
  • 安宝特方案丨AR破解带电配网作业困局!全方位解决方案赋能电力运维新变革
  • 日志混乱与数据不一致问题实战排查:工具协同调试记录(含克魔使用点)
  • java 数组排序算法
  • 【Linux指南】文件内容查看与文本处理
  • OpenCV CUDA模块设备层------简介
  • C++初阶-queue和deque(队列和双端队列)
  • cockplit 出现 Cannot refresh cache whilst offline 处理
  • 时间序列分析
  • 【Java】抽象类与接口全解析
  • android 启动速度优化
  • Ubuntu 22.04离线安装Docker和NVIDIA Container Toolkit(使用gpu)
  • 在 VMware (WM) 虚拟机上安装的 Ubuntu 22.04 分配了 20GB 磁盘,但仅使用 10GB 就显示 “空间已满“
  • 【ZYNQ Linux开发】gpio子系统相关驱动先于Xgpio注册完成而加载失败的问题分析与探究
  • 《从IaaS到容器化:深度解析云计算三层架构与阿里云ECS+K8s协同实践》
  • 快速入门数据结构--栈
  • 【云计算领域数学基础】组合数学优化
  • 1.19集成开发环境(IDE)
  • 百度网站提交入口/优化公司排名
  • 响应式企业网站制作公司/百度搜索风云榜排行榜
  • 免费新建网站/网站搭建策略与方法
  • WordPress设置两个域名/北京网站建设东轩seo
  • 咨询聊城做网站/免费建立网站步骤
  • 滕州外贸网站建设/seo关键词排名优化价格