言成言成啊 | Kit Chen's Blog

SpringCloud网关以及Nacos配置管理与服务发现

发布于2024-03-17 23:01:20,更新于2025-05-09 23:27:31,标签:java  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

先说下版本对应关系,官方文档里倒是提到了springboot、springcloud、springcloudalibaba之间的对应关系,但是文档存在更新不及时问题。因此,版本对应关系,可以直接使用提供的脚手架。

脚手架生成服务

脚手架生成配置截图

一、SpringCloudGateway

创建一个空Maven项目,pom.xml中添加如下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<!-- 异步网关。对应的还有基于Servlet-API的同步网关spring-cloud-starter-gateway-mvc -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

配置示例application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server:
port: 80
spring:
cloud:
gateway:
# spring-cloud-gateway:https://docs.spring.io/spring-cloud-gateway/docs/
# predicate 文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories
# filter 文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
routes:
- id: test
# 用户访问http://127.0.0.1:80/data/a/b/c 实际代理地址http://127.0.0.1:8080/api/a/b/c
predicates:
- Path=/data/**
filters:
- StripPrefix=1
# 使用 (?<segment>.*) 是为了捕获路径部分,后续用 ${segment} 进行替换。
# 也可以不叫segment
- RewritePath=/(?<segment>.*), /api/${segment}
uri: http://127.0.0.1:8080
- id: name
# 用户访问http://127.0.0.1:80/ta/tb/tc 实际代理地址http://127.0.0.1:8080/root/ta/tb/tc
predicates:
- Path=/**
filters:
- RewritePath=/(?<segment>.*), /root/${segment}
uri: http://127.0.0.1:8080

参考文档

直接上源码

二、Nacos配置管理与服务发现

2.1 Nacos编译与使用

了解Nacos可以直接阅读官方文档

使用Nacos,我们需要有Nacos-Server,此处就不使用官方提供的release版本了,而是自己编译,因为本来就是Java开发的,所以对于Javaer来说也没啥难度!

1
2
3
4
git clone https://github.com/alibaba/nacos.git
cd nacos
git checkout 2.2.4
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

只需要四行命令,即可实现编译,要求编译时有网络环境。

之后,进入到distribution/target,即可获取压缩包。

解压后,进入bin目录,执行命令启动nacos服务即可

1
startup.cmd -m standalone

2.2 实现动态数据源切换

创建项目时,需要添加配置管理依赖和服务发现依赖。

“Talk is cheap. Show me the code.”,直接上源码

核心在于@RefreshScope这个注解,被该注解标识后,表示这个Bean在运行时是可刷新的。并且所有基于该Bean的依赖也会被刷新,这些复杂的工作都是springcloud做的,开发者不需要关心。

整体流程如图所示

至于Nacos如何配置,参照Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos

展示一下最后的成果。

参考

发布:2024-03-17 23:01:20
修改:2025-05-09 23:27:31
链接:https://meethigher.top/blog/2024/nacos-cloud-dynamic-datasource/
标签:java 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏