Spring Cloud 之 GateWay简介及简单DEMO的搭建

(1)Filter(过滤器):

和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

(2)Route(路由):

网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

(3)Predicate(断言):

这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。

案例内容:

gateway基本目录:


bootstrap.yml

bash 复制代码
server:
  port: 8081
spring:
  profiles:
    active: dev
  application:
    name: tt-sc-gateway
  cloud:
    nacos:
      username: nacos
      password: nacos
      config:
        server-addr: 192.168.xx.xxx:8848
        file-extension: yml
        #开启nacos作为配置中心,默认值:true
#        enabled: true
#        # 配置文件读取的nacos命名空间ID,默认值:public
#        namespace: 7c6ef0e3-5384-499a-9357-25fa3b9c0a1e
#        # 配置文件在nacos命名空间中的分组,默认值:DEFAULT_GROUP
#        group: DEFAULT_GROUP
#        # 配置文件的文件前缀(配置文件名称),默认值:${spring.application.name}-${spring.profiles.active}
#        prefix: ${spring.application.name}-${spring.profiles.active}
#        # 配置文件的文件后缀(文件类型),默认值:properties
#        file-extension: yaml
#        # 配置内容的编码方式,默认值:UTF-8
#        encode: UTF-8
#        # 获取配置的超时时间,单位:ms,默认值:3000
#        timeout: 3000
#        # 开启监听和自动刷新,动态感知配置变化,默认值:true
#        refresh-enabled: true
        ###############################################
        # 引入扩展配置(同一分组或不同分组)
        # extension-configs:
        # 配置支持共享的 Data Id
          # - data-id: global.yaml
          # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
          # group: DEFAULT_GROUP
          # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
          # refresh: true
      discovery:
        server-addr: 192.168.xx.xxx:8848

application-dev.yml

bash 复制代码
spring:
  cloud:
    gateway:
      discovery:
        locator:
          # 是否与服务发现组件进行结合,通过 serviceId 转发到具体的服务实例。默认为false
          enabled: true
          lower-case-service-id: true #使用小写service-id
      routes: # 网关路由配置
        - id: feignconsumer # 路由id,自定义,只要唯一即可
          # 目标服务地址(uri:地址,请求转发后的地址)
          # uri: http://127.0.0.1:8081 路由的目标地址http 就是固定地址,uri的协议为lb,表示启用Gateway的负载均衡功能。
          uri: lb://tt-sc-feign-consumer # 路由的目标地址lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件;转发地址格式uri/archive
            - Path=/user/** # 这个是按照路径匹配,只要以 /user/ 开头就符合要求
          fitters:
            - RewritePath=/user/?(?<segment>.*),/$\{segment}
        - id: feignprovide
          uri: lb://tt-sc-feign-provide
          predicates:
            - Path=/provide/**
              # 在这个时间之后的请求才会被转发
            #- After=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
      globalcors: # 全局的跨域处理
        add-to-simple-url-handLer-mapping: true # 解决options 请求被拦截问题
        corsConfigurations:
          '[/**]': # 指定 拦截哪些请求
            allowed0rigins: # 允许哪些网站的跨域请求
              - "http:xxx.xxxx"
              - "http://www.you.com"
            allowedMethods: # 允许的跨域 ajax 的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效

GatewayApplication.java

bash 复制代码
package com.tt.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;

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

pom.xml

bash 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>manage</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>tt-sc-gateway</artifactId>

    <dependencies>
        <!-- nacos 客户端 作为 注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <!-- nacos 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.4.RELEASE</version>
           <!-- <version>2.2.2.RELEASE</version>-->
            <exclusions>
                <!-- 排除web依赖-->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

feignconsumer\feignprovide可参照Feign的demo
Spring Cloud 之 Feign 简介及简单DEMO的搭建

测试结果:

相关推荐
曾令胜6 小时前
excel导出使用arthas动态追踪方法调用耗时后性能优化的过程
spring·性能优化·excel
多云几多6 小时前
Yudao单体项目 springboot Admin安全验证开启
java·spring boot·spring·springbootadmin
摇滚侠8 小时前
Spring Boot 3零基础教程,Spring Intializer,笔记05
spring boot·笔记·spring
兮动人9 小时前
Spring Bean耗时分析工具
java·后端·spring·bean耗时分析工具
MESSIR229 小时前
Spring IOC(控制反转)中常用注解
java·spring
smilecold11 小时前
SpringCloud 入门 - Gateway 网关与 OpenFeign 服务调用
spring cloud·gateway
hello 早上好13 小时前
深入 Spring 条件化配置底层:从硬编码到通用注解的实现原理
java·后端·spring
亚林瓜子13 小时前
Spring中Date日期序列化与反序列化中格式设置
java·后端·spring·jackson·date
哞哞不熬夜18 小时前
JavaEE--Spring MVC
spring·java-ee·mvc
Java水解18 小时前
深入剖析Spring Boot依赖注入顺序:从原理到实战
后端·spring