• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringCloud 2021.0.013、路由网关Gateway:入门案例 (spring-boot 2.6.3)

武飞扬头像
土味儿~
帮助1

1)新建 Gateway 模块

springcloud-gateway-9999

2)导jar包

网关服务也需要注册到注册中心,所以需要 eureka-client 包;

这两个包都已集成在父工程 spring-cloud-build 中,不需要版本号

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- spring-cloud-starter-gateway -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
    <!-- <version>3.1.0</version>-->
</dependency>

3)配置 application.yml

  • 网关服务端口
server:
  port: 9999
  • 网关 gateway 配置
spring:
  application:
    # 网关应用名称
    name: springcloud-gatewey-9999
  # 配置 Spring Cloud 相关属性
  cloud:
    # 配置 Spring Cloud Gateway 相关属性
    gateway:
      # 配置网关发现机制
      discovery:
        # 配置处理机制
        locator:
          # ----------------
          # 只要请求地址符合规则:http://网关地址:端口/微服务名称/微服务请求地址,就自动映射
          # 把请求转发到:http://微服务提供者地址:端口/微服务名称/微服务请求地址
          # ----------------
          # 开启网关自动映射处理机制
          # 商业开发中,一般不设置为 true,使用默认值 false;避免不必要的自动转发规则
          enabled: true
学新通
  • eureka 配置

    和服务提供者的配置一样

# 配置 Eureka
eureka:
  client:
    service-url:
      # 注册中心地址
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/

  instance:
    # 修改Eureka上的默认描述信息
    instance-id: springcloud-gatewey-9999
    # 以IP地址注册到服务中心
    prefer-ip-address: true
  • 完整 yml
server:
  port: 9999

spring:
  application:
    # 网关应用名称
    name: springcloud-gatewey-9999
  # 配置 Spring Cloud 相关属性
  cloud:
    # 配置 Spring Cloud Gateway 相关属性
    gateway:
      # 配置网关发现机制
      discovery:
        # 配置处理机制
        locator:
          # ----------------
          # 只要请求地址符合规则:http://网关地址:端口/微服务名称/微服务请求地址,就自动映射
          # 把请求转发到:http://微服务提供者地址:端口/微服务名称/微服务请求地址
          # ----------------
          # 开启网关自动映射处理机制
          # 商业开发中,一般不设置为 true,使用默认值 false;避免不必要的自动转发规则
          enabled: true

# 配置 Eureka
eureka:
  client:
    service-url:
      # 注册中心地址
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/

  instance:
    # 修改Eureka上的默认描述信息
    instance-id: springcloud-gatewey-9999
    # 以IP地址注册到服务中心
    prefer-ip-address: true
学新通

4)主启动类

不需要添加额外的注解

@SpringBootApplication
public class GateWay_9999 {
    public static void main(String[] args) {
        SpringApplication.run(GateWay_9999.class,args);
    }
}

5)测试

依次启动 注册中心服务提供者网关

学新通

注册中心

学新通

服务提供者

学新通

网关

学新通

6)开启服务名称小写转换

lower-case-service-id: true

默认为false

spring:
  application:
    # ....
  cloud:
    gateway:
      discovery:
        locator:          
          enabled: true
          # 开启服务名称小写转换(默认为false)
          lower-case-service-id: true

学新通

7)配置完整路由

spring:
  application:
    # 省略...
  cloud:
    gateway:      
      discovery:
      # 省略...

      # 配置网关中的一个完整路由:
      # 包含:命名、地址、谓词集合(规则)、过滤器集合
      routes:
          # 路由定义中的命名,唯一即可;符合Java中的变量命名规则
        - id: myDept
          # 微服务转发地址;lb: 表示负载均衡 loadbalance
          # lb:// 后面为服务名;如果上面开启了小写转换,就用小写;如果没有开启(默认false),就在注册中心查看,一般为大写
          uri: lb://springcloud-provider-dept
          # -----------------
          # 谓词;命名是有套路的;
          # Predicate 断定式接口
          # 是 GatewayPredicate 接口实现类的命名前缀;格式:xxxRoutePredicateFactory
          # 如:PathRoutePredicateFactory,名字即为:Path
          predicates:
              # predicates 是 List 集合;List<PredicateDefinition>
              # -----------------------------------------------------
              # PredicateDefinition 是 List 集合中的元素;包含 name、args (其中args是一个map)
              # Path 对应于 PathRoutePredicateFactory
            - name: Path
              args:
                # Map 键值对
                # -----------------------
                # 键(patterns) 值(List集合)
                # -----------------------
                # 写法1(单个元素)
                #patterns: /spd/**
                # -----------------------
                # List值中有多个元素
                # 写法2(多个元素)
                #patterns: [/spd/**,/abc/**] #行内写法
                # -----------------------
                # 写法3(多个元素)
                patterns: #多行写法
                 - /spd/**
                 - /abc/**

            # 如果 predicates 集合中只有一个元素,等价于下面的写法:谓词名称=参数
            #- Path=/spd/**
            # ---------------------------------------------------
            # 这个 predicates 的配置表示请求服务的路径是否符合规则
            # http://网关地址:端口/spd/**
            # ---------------------------------------------------

          # -----------------------------------------------------
          # 过滤器配置
          filters:
            # 过滤转发地址前缀;过滤掉1节
            # ---------过滤器解析---------
            # 如果 predicates 规则成立 (true),即请求路径的格式为:
            # http://网关地址:端口/spd/**
            # 那么向注册中心转发的地址应该是:http://注册中心地址:端口/服务名/spd/**
            # 此时过滤掉第1节,即去掉/spd
            # 实际转发的地址为:http://注册中心地址:端口/服务名/**
            # ---------------------------
            - name: StripPrefix
              args:
                # 过滤掉第1节
                parts: 1

            # 如果 filters 集合中只有一个元素,等价于下面的写法:过滤器名称=参数
            #- StripPrefix=1
学新通

注意此处有一个小坑:routes下的uri中服务名 uri: lb://springcloud-provider-dept,用减号符-,不要用下划线_

routes、predicates、filters 都是 List 集合

学新通

学新通

学新通

学新通

如何查找 args 中键的名称

学新通

predicates、filters 的几种配置方法:效果等价

filters 类似

学新通
学新通

学新通

8)关闭自动映射

学新通
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggcbkh
系列文章
更多 icon
同类精品
更多 icon
继续加载