gateway请求二次转发_springcloud实践二:gateway网关详解

微服务框架当前大行其道,网关在微服务架构中是一个非常重要的部分,网关一般作为项目的统一请求入口提供给前端开发人员,前端开发人员不用知道每个微服务的请求地址。网关可以统一对所有请求做过滤、限流、负载均衡、监控等处理,而不必在每个微服务项目重复处理请求。网关配合注册中心也可以很好的实现微服务的动态扩容,只需要在网关将请求路由转发到注册中心的微服务上即可,由注册中心进行负载均衡处理。

Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到api,并为它们提供额外功能,例如:安全性、监控和弹性控制。

Spring Cloud Gateway基于Spring Boot 2.x, Spring WebFlux, 由Spring Webflux提供Netty的运行环境。它不能在传统Servlet容器中工作,也不能在构建为WAR时工作。

Spring Cloud Gateway底层通信框架基于Netty,不同于第一代网关Zuul,gateway是非阻塞的,并且是spring官方开发的,所以拥有强劲的性能。

f5055c7ccd940a5a204a3a2587d01370.png

spring cloud gateway

下面介绍下Spring Cloud Gateway的实际使用。

spring-boot和spring-cloud版本

  • spring-cloud Hoxton.SR8
  • spring-boot 2.3.3.RELEASE
  • spring-cloud-starter-gateway 2.2.5.RELEASE(不需要在pom指定,跟随spring cloud即可)

下面我会演示下实际的项目代码以及效果,我想尽量把需要的代码都贴出来,所以会写的比较细,如果已经掌握的部分可以跳着看即可。

我们现在新建了一个简单的父项目和网关子项目

项目结构

a6ffd2c5ce5394f0d791eba6c5f7bc52.png

项目结构

其中父项目只有一个pom文件,引入了一个公共工具依赖,定义了spring boot和spring cloud的版本,子项目中就不需要定义spring子项目的版本了。

父项目pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>    4.0.0    com.huangtl    springcloud-parent    1.0-SNAPSHOT            gateway        pom            1.8                org.springframework.boot        spring-boot-starter-parent        2.3.3.RELEASE                                            org.springframework.cloud                spring-cloud-dependencies                Hoxton.SR8                pom                import                                                cn.hutool            hutool-all            5.1.3                                                    org.springframework.boot                spring-boot-maven-plugin                                                                                        repackage                                                                                                                spring-milestones            Spring Milestones            https://repo.spring.io/milestone                            false                        

gateway项目

1.引入spring-cloud-starter-gateway依赖

<?xml version="1.0" encoding="UTF-8"?>            springcloud-parent        com.huangtl        1.0-SNAPSHOT        4.0.0    gateway                        org.springframework.cloud            spring-cloud-starter-gateway            

注意,spring-cloud-gateway是不支持spring-boot-starter-web依赖的,一般我们会把网关单独建一个项目。

2.配置文件

在resources目录下新建application.yml,我们将在这里配置大部分的gateway配置项,在配置这些配置项之前,我们先了解几个gateway配置项的概念。

  • Route 路由配置项,包含一个id(唯一标志)、uri(请求转发到该uri)、predicates(请求的匹配条件)、filters(过滤请求)
  • Predicate 请求的匹配条件,可以配置请求路径、请求头或参数、请求时间等的匹配条件,若符合条件则匹配路由
  • Filter 可以修改请求和响应数据,比如修改请求路径、修改请求头、删除请求参数、修改响应头、设置断路器等等

predicate的配置项有快捷和完整两种写法:

快捷写法格式:- 表达式名称 = 参数(多参数可逗号隔开)

spring:  cloud:    gateway:      routes:      - id: after_route        uri: https://example.org        predicates:        - Cookie=mycookie,mycookievalue

完整写法用 - name 加上 args参数来配置,上面快捷写法对应的完整写法如下:

spring:  cloud:    gateway:      routes:      - id: after_route        uri: https://example.org        predicates:        - name: Cookie          args:            name: mycookie            regexp: mycookievalue

我们接下去的测试都会用快捷的写法。

3.新建一个springboot启动类

package com.huangtl.gateway;import org.springframework.boot
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值