Gateway-01-gateway简介和Helloworld

1:Gateway简介

1:Api网关介绍

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。
API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制
和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在
API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管
理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进
行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。

2:Api网关作用

在这里插入图片描述
在这里插入图片描述

3:Api网关开源实现

用于实现API网关的技术有很多,大致分为这么几类:
通用反向代理:Nginx、Haproxy、……
网络编程框架:Netty、Servlet、……
API网关框架:Spring Cloud Gateway、Zuul、Zuul2、……

4:Gateway网关介绍

官网:https://spring.io/projects/spring-cloud-gateway

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的
网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由
方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级版和代替品,比 Zuul 2 更早的使用 Netty 实现
异步 IO,从而实现了一个简单、比 Zuul 1.x 更高效的、与 Spring Cloud 紧密配合的 API 网关。
Spring Cloud Gateway 里明确的区分了 Router 和 Filter,并且一个很大的特点是内置了非常多的开箱
即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用。
比如内置了 10 种 Router,使得我们可以直接配置一下就可以随心所欲的根据 Header、或者 Path、或
者 Host、或者 Query 来做路由。
比如区分了一般的 Filter 和全局 Filter,内置了 20 种 Filter 和 9 种全局 Filter,也都可以直接用。当然
自定义 Filter 也非常方便。

gateway特点:

  • 基于SpringFramework5,ProjectReactor和SpringBoot2.0进行构建
  • 能够匹配任何任何请求属性
  • 可以对路由指定Predicates和Filters
  • 集成断路器
  • 集成Spring Cloud服务发现
  • 易于编写的Predicates和Filters
  • 支持请求限流
  • 支持路径重写

2:Gateway工作原理

工作原理图

在这里插入图片描述
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到
网关Web处理程序。该处理程序通过特定于请求的过滤器链来运行请求。筛选器由虚线分隔的原因是,
筛选器可以在发送代理请求之前和之后都运行逻辑。所有“前置”过滤器逻辑均被执行。然后发出代理请
求。发出代理请求后,将运行“后”过滤器逻辑。

gateway三个概念:

  • 路由:路由是构建网关的基本模块,它由ID,目标URI,一系列的断言Predicates和过滤器Filters组成,如果断言为true,则匹配该路由。
  • 断言:参考Java8的java.util.function.Predicate,开发人员可以匹配HTTP请求中的所有内容,例如请求头或请求参数,如果请求与断言相匹配则进行路由。
  • 过滤:Spring框架中GatewayFilter的实例,使用过滤器,可以载请求被路由前或者后对请求进行修改。

3:gateway的Helloworld程序

1:设置order服务(普通服务)

application.yml

server:
  port: 19092

spring:
  application:
    name: gateway-order

在这里插入图片描述

在这里插入图片描述

2:设置user服务(普通服务)

application.yml

server:
  port: 19091


spring:
  application:
    name: gateway-user

在这里插入图片描述
在这里插入图片描述

3:设置gateway-server服务

1:导包

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2:配置application.yml

server:
  port: 19090


spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      routes: #路由规则定义
        - id: gataway-user #路由ID,必须唯一
          uri: http://localhost:19091/ #路由地址,后续也可更改成其他的类型,诸如指向微服务
          predicates: # 断言规则,既满足此断言既按照此路由规则跳转
            - Path=/user/**  #请注意这个Path的P是大写的!
        - id: gateway-order
          uri: http://localhost:19092/
          predicates:
            - Path=/order/**



4:测试

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41694906/article/details/126543625