SpringCloud之网关Gateway

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.8

1.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 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人

找小编(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)领取

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值