# 使用心得
# nacos
nacos 的配置管理和服务管理
我们可以将 该模块的服务发现配置,配置到 nacos 中命名为 other.yml。随后我们在项目模块中创建的 bootstrap.yml 中进行配置 配置管理就可以了如下:
bootstrap.yml
spring: | |
cloud: | |
nacos: | |
config: | |
server-addr: 192.168.56.10:8848 | |
namespace: 213cbf4d-8431-4612-8037-4ccfd264fd94 | |
ext-config: | |
- data-id: oss.yml | |
group: DEFAULT_GROUP | |
refresh: true | |
- data-id: other.yml | |
group: DEFAULT_GROUP | |
refresh: true | |
application: | |
name: gulimall-third-party |
nacos 中的配置
先创建一个命名空间为该项目的比如:third-party
在这个 third-party 命名空间中来创建相关配置
oss 的主要就是配置了 oss 对象存储的一些配置,我们来看 other 的配置
server: | |
port: 8877 | |
spring: | |
cloud: | |
nacos: | |
discovery: | |
server-addr: 192.168.56.10:8848 | |
application: | |
name: gulimall-third-party |
其中配置了该模块的基本信息和服务发现的配置
PS:服务发现如果需要配合其它的模块那么它们最好在同一个命名空间中,如下:注意我说的是服务发现而不是配置,配置可以隔离
这里由于我其他的模块都需要通过网关负载均衡到 renren-fast 模块中,所以不能进行 命名空间的隔离否则就会 503
# gateway
# 重写 URL 规则:
我需要将路径如:http://localhost:8088/api/thirdparty/getUpload 中的 api/thirdparty/ 进行过滤掉 替换为 http://localhost:8088/getUpload
/api/thirdparty/ 是前端访问接口时必须的前缀
可以进行如下配置:
server: | |
port: 8088 | |
spring: | |
cloud: | |
nacos: | |
discovery: | |
server-addr: 192.168.56.10:8848 | |
gateway: | |
# 这里需要注意一下顺序,它会按照顺序来执行条件 | |
routes: | |
- id: product_route | |
uri: lb://gulimail-product | |
predicates: | |
- Path=/api/product/** | |
filters: | |
- RewritePath=/api/(?<segment>.*),/$\{segment} | |
- id: third_party_route | |
uri: lb://gulimall-third-party | |
predicates: | |
- Path=/api/thirdparty/** | |
filters: | |
- RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment} | |
- id: admin_route | |
uri: lb://renren-fast | |
predicates: | |
- Path=/api/** | |
filters: | |
- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment} | |
application: | |
name: gulimail-gateway |
RewritePath=/api/(?<segment>.*),/renren-fast/${segment} 的解释如下:
RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}
这一规则通常用于 URL 重写。在这种情况下,这条规则可能被应用在一个反向代理服务器或 API 网关中,目的是将请求的 URL 进行修改或重定向。
让我们分解这条规则并详细解释其含义:
RewritePath
:这是一个重写路径的指令,表明接下来的内容将用于 URL 重写。/api/thirdparty/(?<segment>.*)
:这是一个正则表达式,用于匹配请求的原始 URL。
/api/thirdparty/
:这是 URL 的固定部分,需要匹配这个前缀。(?<segment>.*)
:这是一个命名捕获组,名为segment
。.*
表示匹配任意字符(包括没有字符),捕获的内容会被放入segment
变量中。
,
:逗号用来分隔原始 URL 模式和重写后的目标 URL。/${segment}
:这是重写后的目标 URL。
${segment}
:表示引用之前捕获的segment
变量的内容。
# 举例说明
假设有一个原始请求 URL:
/api/thirdparty/service/data |
根据重写规则:
- 匹配部分:
/api/thirdparty/
和service/data
,其中service/data
会被捕获到segment
变量中。 - 重写部分:
${segment}
变成service/data
。
所以,重写后的 URL 将变成:
/service/data |
# 总结
这条规则的作用是将所有以 /api/thirdparty/
开头的请求路径重写为去掉 /api/thirdparty/
前缀的路径。即, /api/thirdparty/xxx
被重写为 /xxx
。