谷粒商城-全栈-15 分布式组件-SpringCloud-Gateway 网关创建及测试

一、Gateway网关概念

网关作为流量的入口,常用功能包括路由转发、权限校验限流控制等。而 Springcloud gateway作为 SpringCloud官方推出的第二代网关框架,取代了 Zuul 网关。

特点:

  • 路由(Route):路由网关的基本构建块。它由ID,目标URI,断言集合和过滤器集合定义。如果断言为true,则匹配路由。
  • 断言(Predicate):这是Java 8 断言函数。输入类型是Spring Framework ServerWebExchange。这使开发人员可以匹配HTTP请求中的所有内容,例如标头或参数。
  • 过滤器(Filter): 发送下游请求之前或之后,可以修改请求和响应。

工作过程:
file

客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序运行通过特定于请求的筛选器链发送请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前或之后执行逻辑。执行所有“前置”过滤器逻辑,然后发出代理请求。发出代理请求后,将执行“后”过滤器逻辑。

二、GateWay创建

右键File->Module->使用 Spring Intitializr 创建模块

file

  • Project Metadata
    • Group: com.atguigu.gulimall
    • Artifact: gulimall-gateway
    • Package: com.atguigu.gulimall.gateway
  • Dependencies添加依赖
    • Spring Cloud Routing-Gateway

修改gulimall-gateway\pom.xml添加依赖

  <dependency>
      <groupId>com.atguigu.gulimall</groupId>
      <artifactId>gulimall-common</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>

启用GulimallGatewayApplication.java

/**
 * 1、启动注册自动发现
 * 2、排除数据源自动配置(因为网关服务不需要用到数据库方便的功能,如果不排除启动会报错)
 */
@EnableDiscoveryClient
// 排除数据源自动配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {

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

}

创建gulimall-gateway\src\main\resources\bootstrap.properties

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=547e4766-5a3a-41ac-bf98-b52a4c092718

在nacos创建命名空间gateway,创建Data-ID:gulimall-gateway.properties

spring.application.name=gulimall-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
server.port=8888

创建配置文件gulimall-gateway\src\main\resources\application.yml

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

启动gulimall-gateway访问http://localhost:8888/hello?url=baidu,跳转至百度
启动gulimall-gateway访问http://localhost:8888/hello?url=qq,跳转至腾讯

至此,我们的网关已经配置OK了,然后将代码提交到码云上。

相关文章:
spring-cloud-gateway官方文档

为者常成,行者常至