微服务实战之网关与智能路由的应用「终于解决」

微服务实战之网关与智能路由的应用「终于解决」Gateway服务网关概述1. Gateway简介Spring Cloud Gateway是Spring官方基于Spring 5.0,Sprin

欢迎大家来到IT世界,在知识的湖畔探索吧!

Gateway服务网关概述

1. Gateway简介

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Reactor等技术开发的网关

Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL

Reactor 模式是一种典型的事件驱动的编程模型

Gateway解决了哪些问题

Gateway主要解决了路由转发、限流、熔断、权限功能。

Gateway构建方式

  • 代码实现(不推荐)
  • 配置文件实现(推荐)

2. Gateway工作流程

思考:

不使用网关,直接访问各个微服务可以吗?

微服务实战之网关与智能路由的应用「终于解决」

使用网关

微服务实战之网关与智能路由的应用「终于解决」

Gateway核心概念介绍

1、核心概念

  • Route (路由)
    • Route 是网关的基础元素,由 ID、目标 URI、断言、过滤器组成。
    • 当请求到达网关时,由 Gateway Handler Mapping 通过断言进行路由匹配(Mapping),当断言为真时,匹配到路由。
  • Predicate(断言)
    • Predicate 是 Java 8 中提供的一个函数。
    • 它允许开发人员匹配来自 HTTP 的请求,简单来说它就是匹配条件。
  • Filter (过滤器)
    • 过滤器作为网关的其中一个重要功能,就是实现请求的鉴权。
    • Gateway自带过滤器有很多,常见自带过滤器有:

网关使用场景:

  • 请求鉴权:如果没有访问权限,直接进行拦截
  • 异常处理:记录异常日志
  • 服务调用时长统计

2. 过滤器配置

Gateway有两种过滤器

  • 局部过滤器:只作用在当前配置的路由上。
  • 全局过滤器:作用在所有路由上。

配置全局过滤器步骤(此处配置AddResponseHeader,具体参照上面的表格):

1)修改application.yml文件

微服务实战之网关与智能路由的应用「终于解决」

2) 浏览器输入 http://localhost:8081/demo/hi,F12查看响应头信息

微服务实战之网关与智能路由的应用「终于解决」

Gateway断言工厂介绍

1. After路由断言

After 路由可配置一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之后会成功匹配,才交给 route去处理。

微服务实战之网关与智能路由的应用「终于解决」

2. Between路由断言

Between路由断言工厂接受两个参数,datetime1和datetime2。

匹配发生在datetime1与datetime2之间请求。

微服务实战之网关与智能路由的应用「终于解决」

3. Header路由断言

Header由断言工厂接受两个参数,头名称和正则表达式。

给定名称的头匹配,该值与正则表达式匹配。

微服务实战之网关与智能路由的应用「终于解决」

4. Cookie路由断言

Cookie路由断言工厂接受两个参数: 【Cookie=cookie名, cookie值的正则表达式规则】

cookie配置成功则进行路由

微服务实战之网关与智能路由的应用「终于解决」

5. Host 路由断言

Host路由断言工厂接受一个参数:需要一个参数即hostname。它可以使用. * 等去匹配host。

这个参数会匹配请求头中的host的值,一致,则请求正确转发。

微服务实战之网关与智能路由的应用「终于解决」

6. Method 路由断言

Method路由断言工厂接受一个参数:HTTP方法来匹配。

微服务实战之网关与智能路由的应用「终于解决」

7. Path 路由断言

Path路由断言工厂接受一个参数:采用Spring PathMatcher 模式

微服务实战之网关与智能路由的应用「终于解决」

8. Query路由断言

Query路由断言工厂接受两个参数:配置说明:【Query=参数名,参数值】

如果请求的参数包含name=zhangsan则成功路由

微服务实战之网关与智能路由的应用「终于解决」

9. RemoteAddr路由断言

支持通过设置某个 ip 区间号段的请求才会路由

微服务实战之网关与智能路由的应用「终于解决」

组合使用

微服务实战之网关与智能路由的应用「终于解决」

GateWay 内部提供了很多种灵活的路由转发规则,在同一个路由内存在多个 Predicate 时,同时满足规则后,请求才会被路由转发。

Gateway网关快速入门

Gateway智能路由

本章节场景:

我们将建立三个Module,父项目是itheima-service-gateway,里面没有任何代码,它用来管理我们的聚合工程。

微服务实战之网关与智能路由的应用「终于解决」

具体场景:

将service-order、service-payment、service-gateway注册到Nacos,通过service-gateway网关服务调用

微服务实战之网关与智能路由的应用「终于解决」

1.创建Gateway模块

创建service-gateway模块,端口8081,作为服务网关

2. 引入起步依赖

微服务实战之网关与智能路由的应用「终于解决」

3. 修改application.yml文件

微服务实战之网关与智能路由的应用「终于解决」

4. 启动入口类

微服务实战之网关与智能路由的应用「终于解决」

5. 启动

分别启动service-order、service-payment、service-gateway注册到Nacos

微服务实战之网关与智能路由的应用「终于解决」

6. 访问

1) 不使用网关访问service-order服务

微服务实战之网关与智能路由的应用「终于解决」

2) 使用网关访问service-order服务

微服务实战之网关与智能路由的应用「终于解决」

由此可见,我们使用http://localhost:8081/czbk/v1/order/create访问网关,也同样输出了HI,itheima ,创建订单成功>>>>>port:8762

那是因为我们的网关服务service-gateway配置文件application.yml文件中配置了路由转发功能;核心的参数为

微服务实战之网关与智能路由的应用「终于解决」

url为指向注册中心的服务,主要是从我们的注册中心获取服务,注册中心可以是多种类型Consul或者Zookeeper

Path为转发路径

在上面的配置中,配置了一个Path 的predict,将以/czbk/v1/order/**开头的请求都会转发到uri:lb://service-order 的地址上, lb://service-order即service-order服务的负载均衡地址,并用StripPrefix的filter 在转发之前将/czbk去掉

Gateway过滤器

spring cloud Gateway网关过滤器类型主要分:全局和局部过滤器

1、全局过滤器

GlobalFilter :全局过滤器,对所有的路由均起作用无需任何配置文件配置就可以起到过滤器的作用

全局默认过滤器

微服务实战之网关与智能路由的应用「终于解决」

配置方式

微服务实战之网关与智能路由的应用「终于解决」

2、局部过滤器

GatewayFilter :只对指定的路由起作用

一种是直接 实现GatewayFilter, Ordered接口,另一种是 继承AbstractGatewayFilterFactory类

可以通过下面的方式配置

注意:

下面的 – RequestTime=true的RequestTime

对应它的类名RequestTimeGatewayFilterFactory

微服务实战之网关与智能路由的应用「终于解决」

全局过滤器代码

微服务实战之网关与智能路由的应用「终于解决」

不加token访问

微服务实战之网关与智能路由的应用「终于解决」

加入token

微服务实战之网关与智能路由的应用「终于解决」

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22709.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信