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的搭建

测试结果:

相关推荐
成富2 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
鹿屿二向箔1 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的汽车租赁共享平台系统
spring·mvc·mybatis
豪宇刘1 小时前
SpringBoot+Shiro权限管理
java·spring boot·spring
想进大厂的小王1 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
一只爱打拳的程序猿2 小时前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧2 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
牛角上的男孩4 小时前
Istio Gateway发布服务
云原生·gateway·istio
ajsbxi6 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet