spring-cloud-alibaba-整合spring-cloud-gateway-3.1.4

spring-cloud-alibaba-整合spring-clouid-gateway-3.1.4

前言

最近使用较新版本的spring-cloud-alibaba搭建微服务框架, 在整合spring-cloud-gateway时遇到了一些问题, 所以记录一下, 如有不妥当的地方欢迎留言, 我会及时更正

版本说明

组件依赖 版本说明 官网地址
spring-boot 2.6.11 https://spring.io/projects/spring-boot#learn
spring-cloud-netflix 2021.0.4 https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
spring-cloud-alibaba 2021.0.4 https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
nacos-server 2.0.4 https://github.com/alibaba/nacos/releases/tag/2.0.4
nacos-client 2021.0.4.0
spring-cloud-starter-loadbalancer 3.1.5
spring-cloud-gateway 3.1.4

引入spring-cloud-gateway

  • pom.xml
<dependencies>
  <!--SpringBoot-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
  </dependency>

  <!--spring cloud alibaba-->
  <!--nacos 服务注册与发现 -->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>

  <!-- nacos 配置中心 -->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

  <!-- openfeign 具备RPC通信能力 -->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

  <!--spring cloud gateway 网关-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
      <exclusions>
          <exclusion>
              <groupId>org.hibernate.validator</groupId>
              <artifactId>hibernate-validator</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
</dependencies>

注意: 需要将pom中 spring-cloud-starter-gateway 依赖排除 hibernate-validator这个包, 不然会报错

Gateway(SrpingBoot)项目配置

  • application.yml
server:
  port: 8010
  tomcat:
    uri-encoding: UTF-8
  max-http-header-size: 80KB

spring:
  application:
    name: gateway-server-01
  profiles:
    active: dev
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    default-property-inclusion: non_null
    time-zone: GMT-8
    serialization:
      WRITE_DATES_AS_TIMESTAMPS: false
    property-naming-strategy: SNAKE_CASE
  main:
    web-application-type: reactive
  • application-dev.yml
spring:
  cloud:
    ## gateway 注册到nacos
    nacos:
      discovery:
        server-addr: http://192.168.88.100:8848
        username: nacos
        password: nacos
        group: DEFAULT_GROUP
        service: ${spring.application.name}
        register-enabled: true
      config:
        group: DEFAULT_GROUP
        share-data-ids: ${spring.application.name}-${spring.profiles.active}
        server-addr: http://192.168.88.100:8848
        namespace: public
    ## gateway config
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        ## 需要路由到的 server name
        - id: blog-admin-01
          # 采用 LoadBalanceClient 方式请求, 以 lb:// 开头, 后面的是注册在 Nacos 上的服务名
          uri: lb://blog-admin-01
          # Predicate 翻译过来是"谓词"的意思,必须,主要作用是匹配用户的请求, 有很多种用法
          predicates:
            - Path=/blog-admin/**
          filters:
            # 前缀过滤, 默认配置下, 我们的请求路径是 http://localhost:8888/business-oauth2/** 这时会路由到指定的服务
            # 此处配置去掉 1 个路径前缀, 再配置上面的 Path=/api/**, 就能按照 http://localhost:8888/api/** 的方式访问了
            - StripPrefix=1
  config:
    import: nacos:application-dev.yml
  • SpringBoot启动类
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayServerApplication.class, args);
    }
}
  • Nacos服务列表

image.png

验证

需要通过gateway转发到具体的应用服务, 这里通过访问gateway, 转发到 blog-admin-01这个服务, 下面运行结果说明是没有问题的

image.png

posted @ 2022-12-14 12:59  Lil-K  阅读(583)  评论(0编辑  收藏  举报