(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
server:port: 8081
spring:profiles:active: devapplication:name: tt-sc-gatewaycloud:nacos:username: nacospassword: nacosconfig:server-addr: 192.168.xx.xxx:8848file-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: truediscovery:server-addr: 192.168.xx.xxx:8848
application-dev.yml
spring:cloud:gateway:discovery:locator:# 是否与服务发现组件进行结合,通过 serviceId 转发到具体的服务实例。默认为falseenabled: truelower-case-service-id: true #使用小写service-idroutes: # 网关路由配置- 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: feignprovideuri: lb://tt-sc-feign-providepredicates:- 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 # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效
GatewayApplication.java
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
<?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的搭建
测试结果: