概述

网关功能:

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

image-1655617833608

在SpringCloud中网关的实现包括两种:

  • gateway
  • zuul
    Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

网关的搭建

创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

网关的application.yml

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      routes:
        - id: user-service #路由表示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates:
            - Path=/user/** #路径判断,判断路径是否是以/user开头,如果是则符合,注意Path是大写的P
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

启动类

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

测试

此时,如果我们想要访问userservice的服务,只需要请求是/user/**就好了,请求orderservice也类似。
image-1655618195881


image-1655618180133

总结

网关搭建步骤:

  • 创建项目,引入nacos服务发现和gateway依赖
  • 配置application.yml,包括服务基本信息、nacos地址、路由

路由配置包括:

  • 路由id:路由的唯一标示
  • 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  • 路由断言(predicates):判断路由的规则,
  • 路由过滤器(filters):对请求或响应做处理
    image-1655618915495