3、过滤器(Filter):一个标准的Spring WebFilter,Spring Cloud Gateway中的Filter分为两种类型:Gateway Filter和Global Filter。过滤器Filter可以对请求和响应进行处理
2、基本搭建
①、新建模块
②、导入依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.gateway
code
0.0.1-SNAPSHOT
gateway
Demo project for Spring Boot
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring-boot.version>2.4.1</spring-boot.version>
<spring-cloud.version>2020.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
org.springframework.boot
spring-boot-starter-webflux
org.springframework.boot
spring-boot-starter-test
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.cloud
spring-cloud-loadbalancer
com.alibaba
fastjson
1.2.35
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.81.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
2.4.1
com.gateway.code.GatewayApplication
repackage
repackage
③、nacos中注册服务
yml文件:
server:
#此处的8084端口号,就好像以前外置的tomcat的8080,让我们通过浏览器进行访问
#但此服务只是做了一个路由,它会将请求路由到其它微服务(一般是消费者)进行处理
port: 8084
spring:
application:
#微服务名
name: gateway
cloud:
nacos:
discovery:
#指定nacos注册中心的地址
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
以前:localhost:8082/user/aa
路由:localhost:8084/consumer/user/aa
路由:localhost:8084/provider/user/aa
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认false
#为true代表开启基于服务发现的路由规则。
enabled: false
#配置之后访问时service-id无需大写
lower-case-service-id: true
routes: #路由
# 路由标识(id:标识,具有唯一性)
- id: user-consumer-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://consumer
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
# 路径匹配,
localhost:8082/user/aa 不能进入
localhost:8082/cum/user/aa 能
- Path=/cum/**
filters: #过滤器
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/,就将转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=1
#生产者
# 路由标识(id:标识,具有唯一性)
- id: user-provider-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://provider
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
# 路径匹配,
- Path=/api/prv/**
filters:
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/,就将转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=2
logging:
level:
#开启spring-Cloud-gateway的日志级别为debug,方便debug调试
org.springframework.cloud.gateway: trace
org.springframework.http.server.reactive: debug
org.springframework.web.reactive: debug
reactor.ipc.netty: debug
#springboot监控Actuator,暴露所有端点
management:
endpoints:
web:
exposure:
include: ‘*’
#自定义配置
gateway:
nacos:
#配置中心地址
server-addr: ${spring.cloud.nacos.discovery.server-addr}
#指定环境
namespace: xxx-xx-xx-xx
#读取配置管理中的Data Id
data-id: dynamic-routing.json
group: DEFAULT_GROUP
④、启动类GatewayApplication
增加注解
@EnableDiscoveryClient
运行:
3、路由方式1
yml文件:
gateway:
discovery:
locator:
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认false
#为true代表开启基于服务发现的路由规则。
enabled: true
#配置之后访问时service-id无需大写
lower-case-service-id: true
得到三种服务方式:
4、路由定义
路径分离:
yml文件:
routes: #路由
路由标识(id:标识,具有唯一性)
- id: user-consumer-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://consumer
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
路径匹配,
localhost:8082/user/aa 不能进入
localhost:8082/cum/user/aa 能
- Path=/cum/**
filters: #过滤器
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/,就将转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=1
#生产者
路由标识(id:标识,具有唯一性)
- id: user-provider-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://provider
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
路径匹配,
- Path=/api/prv/**
filters:
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/,就将转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=2
5、动态路由设置
①、自定义配置
yml文件:
#自定义配置
gateway:
nacos:
#配置中心地址
server-addr: ${spring.cloud.nacos.discovery.server-addr}
#指定环境
namespace: xxx-xx-xx-xx
#读取配置管理中的Data Id
data-id: dynamic-routing.json
group: DEFAULT_GROUP
在配置列表中新增配置dynamic-routing.json:
配置内容:
{
“refreshGatewayRoute”: true,
“routeList”: [
{
“id”: “consumer-api”,
“predicates”: [
{
“name”: “Path”,
“args”: {
“_genkey_0”: “/cum/**”
}
}
],
“filters”: [
{
“name”: “StripPrefix”,
“args”: {
“_genkey_0”: “1”
}
}
],
“uri”: “lb://consumer”,
“order”: 0
},
{
“id”: “provider-api”,
“predicates”: [
{
“name”: “Path”,
“args”: {
“_genkey_0”: “/api/pvr/**”
}
}
],
“filters”: [
{
“name”: “StripPrefix”,
“args”: {
“_genkey_0”: “2”
}
}
],
“uri”: “lb://provider”,
“order”: 0
}
]
}
②、解析
Ⅰ、yml注入到实体类
FilterEntity:
package com.gateway.code.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.LinkedHashMap;
import java.util.Map;
/**
- @author hgh
*/
@SuppressWarnings(“all”)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class FilterEntity {
//过滤器对应的Name
private String name;
//路由规则
private Map<String, String> args = new LinkedHashMap<>();
}
GatewayNacosProperties:
package com.gateway.code.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@SuppressWarnings(“all”)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
找小编(vip1024c)领取
(img-Vvuc7bKh-1721721508720)]
[外链图片转存中…(img-zOwPNpKF-1721721508721)]
《MySql性能优化的21个最佳实践》
[外链图片转存中…(img-EH1ftRGd-1721721508722)]
[外链图片转存中…(img-dZyhfEn9-1721721508722)]
[外链图片转存中…(img-T9vfOIja-1721721508722)]
[外链图片转存中…(img-h5Bir2y3-1721721508723)]
《MySQL高级知识笔记》
[外链图片转存中…(img-em3qmRFO-1721721508723)]
[外链图片转存中…(img-Mh4vM1PV-1721721508723)]
[外链图片转存中…(img-Volm29Pt-1721721508724)]
[外链图片转存中…(img-0pP4xA6s-1721721508724)]
[外链图片转存中…(img-vRpPr0zg-1721721508724)]
[外链图片转存中…(img-xsqG1Vk1-1721721508725)]
[外链图片转存中…(img-TEF9BASU-1721721508725)]
[外链图片转存中…(img-Qg1vw9aU-1721721508725)]
[外链图片转存中…(img-0ugrV5BC-1721721508725)]
[外链图片转存中…(img-TUPR1Hun-1721721508726)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-p2SMxVCL-1721721508726)]
关注我,点赞本文给更多有需要的人
找小编(vip1024c)领取