【云原生&微服务>SCG网关篇三】Spring Cloud Gateway是什么、详细使用案例

网友投稿 341 2022-09-14

【云原生&微服务>SCG网关篇三】Spring Cloud Gateway是什么、详细使用案例

文章目录

​​一、前言​​​​二、Spring Cloud Gateway​​

​​核心概念​​

​​三、Gateway使用案例​​

​​0、最上层父项目spring-cloud-alibaba-center​​

​​1)pom.xml​​

​​1、普通服务simple-service​​

​​1、pom.xml​​​​2、application.yml​​​​3、启动类SimpleServiceApplication​​​​4、HelloController​​​​5、启动simple-service​​

​​2、搭建Gateway​​

​​1、pom.xml​​​​2、application.yml​​​​3、启动类GatewayApplication​​​​4、启动gateway-center​​

​​3、路由效果验证​​

​​四、总结​​

一、前言

至此微服务网关系列文章已出:

​​【云原生&微服务>SCG网关篇一】为什么要有网关、生产环境如何选择网关​​​​云原生&微服务>SCG网关篇二】生产上那些灰度发布方式​​

聊了以下问题:

为什么要有网关?网关的作用是什么?网关的分类?网关的技术选型?使用网关时常用的灰度发布方式有哪些?

本文接着聊SpringCloud生态中的SpringCloudGateway是什么?并给出详细使用案例?

二、Spring Cloud Gateway

官方文档:​​Cloud Gateway 是Spring Cloud的第二代网关,用于替换Zuul;基于Netty、Reactor以及WebFlux构建。

1> 优点:

性能强劲:Gateway基于netty和reactive模型构建,所以它的性能是Zuul的1.6倍左右。功能强大:内置了很多实用功能,比如转发、监控、限流等。

注册到Nacos,自动检测nacos上其他的服务集成Ribbon(SCG老版本)、集成SCB–spring cloud loadbalancer(SCG2020版本开始)实现请求负载限流/容错(默认Hystrix,也可以用Sentinel)

设计优雅、易扩展

2> 缺点:

依赖Netty与WebFlux,不是Servlet编程模型,有一定的学习、适应成本。不能在Servlet容器下工作,只能打成jar包,不能构建成war包。不支持Spring Boot 1.X。

核心概念

路由(Route):路由是⽹关最基础的部分,路由信息由⼀个ID、⼀个目标URL、⼀组断⾔​​Predicate​​和⼀组Filter组成。如果断⾔路由为真,则说明请求的URL和配置匹配;也可以吧路由理解为一条请求转发规则。

ID:编号,路由的唯⼀标识;URI:路由指向的⽬标 URI,即请求最终被转发的⽬的地。Predicate:断言 / 谓语,作为路由的匹配条件。Filter:过滤器,对请求和响应进⾏拦截,实现⾃定义的功能。

断⾔/谓词(Predicate):Spring Cloud Gateway使用​​Predicate​​作为路由的匹配条件;Gateway 内置了多种 Predicate 的实现,提供了多种请求的匹配条件,⽐如说基于请求的 Path、Method 等等。

即java.util.function.Predicate

过滤器(Filter):过滤器Filter会对请求和响应进行拦截处理,实现自定义的功能;Gateway 内置了多种 Filter 的实现,提供了多种请求的处理逻辑,⽐如说限流、熔断等等。

此外,Spring Cloud Gateway启动时基于Netty Server 监听一个指定的端口(可以通过server.port属性自定义),Client的请求都会先打到Netty Server,然后再走到Predicates、Filters,最后走一层Netty proxy将请求转发到指定的微服务。

三、Gateway使用案例

整体项目目录包括两个Module,分别为:gateway-center、simple-service。

其中gateway-center作为路由网关、simple-service作为一个普通的微服务被整合到Gateway中。

0、最上层父项目spring-cloud-alibaba-center

spring-cloud-alibaba-center项目下只保留一个跟pom,用于做整体项目的maven依赖管理

1)pom.xml

headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String name = String.valueOf(headerNames.nextElement()); String value = request.getHeader(name); sb.append("headerName=" + name); sb.append(", headerValue=" + value); sb.append(";"); } System.out.println("[simple-service]:sayParam Hello! requestParam:" + sb); return "[simple-service]:sayParam Hello! requestParam:" + sb; }}

5、启动simple-service

启动成功后,控制台输出如下:

2、搭建Gateway

Gateway-center整体代码结构目录如下:

其中包含一个pom.xml文件、一个application.yml配置文件、一个启动类;

1、pom.xml

标签:API
上一篇:Lombok报错:You aren‘t using a compiler supported by lombok, so lombok will not work and has been disab
下一篇:广告文案:李佳琦这次不带货,带人!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~