# 使用心得

# 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

image-20240604142033810

在这个 third-party 命名空间中来创建相关配置

image-20240604142118980

oss 的主要就是配置了 oss 对象存储的一些配置,我们来看 other 的配置

server:
 port: 8877
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.56.10:8848
  application:
    name: gulimall-third-party

其中配置了该模块的基本信息和服务发现的配置

PS:服务发现如果需要配合其它的模块那么它们最好在同一个命名空间中,如下:注意我说的是服务发现而不是配置,配置可以隔离

image-20240604142335059

这里由于我其他的模块都需要通过网关负载均衡到 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 进行修改或重定向。

让我们分解这条规则并详细解释其含义:

  1. RewritePath :这是一个重写路径的指令,表明接下来的内容将用于 URL 重写。

  2. /api/thirdparty/(?<segment>.*)

    :这是一个正则表达式,用于匹配请求的原始 URL。

    • /api/thirdparty/ :这是 URL 的固定部分,需要匹配这个前缀。
    • (?<segment>.*) :这是一个命名捕获组,名为 segment.* 表示匹配任意字符(包括没有字符),捕获的内容会被放入 segment 变量中。
  3. , :逗号用来分隔原始 URL 模式和重写后的目标 URL。

  4. /${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