一、 什么是网关服务
网关服务是单一访问点,并充当多项服务的代理。服务网关启用了跨所有服务的变换、路由和公共处理。
基本原理
服务网关模块是单一调解,用于处理对多个服务使用者和提供者的请求。任何服务网关都有如下四个典型步骤:
1)常用处理 - 一旦网关接收到消息,就对所有消息执行常用处理,例如添加协议级的头或者记录该消息。
2)服务标识 - 必须将网关所处理的消息标识为特定服务类型。例如,查询消息以确定它是针对服务提供者 A、B 还是 C。
3)端点路由 - 当它确定某消息将传递到特定服务提供者时,它将映射到网络可寻址端点,以便可以将该消息转发到服务提供者。
4)特定于服务的处理 - 执行特定目标服务所需的任何处理。
用户可以根据不同的场景更改这四个步骤的顺序。
1 为什么要使用网关
协调请求与服务的调用关系,协调服务之间的关系。
2 网关解决了什么问题
二、 编写网关服务入门案例
1 创建项目
修改 pom 文件
<project
修改配置文件
spring.application.name=zuul-gateway
server.port=9020
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
修改启动类
@SpringBootApplication
通过网关访问请求服务
http://网关服务地址:网关服务端口/访问的服务的名称/访问的服务中的接口的地址
三、 路由器的 4 种路由规则方法
1 创建项目
2 采用 URL 指定路由方式
修改配置文件配置路由规则
spring.application.name=zuul-gateway-route
server.port=9030
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
# 1 ###################### 路由指定:URL 指定 #############################
# URL 匹配关键字,如果包含关键字就跳转到指定的 URL 中
zuul.routes.e-book-product-provider.path=/e-book-product-provider/**
zuul.routes.e-book-product-provider.url=http://127.0.0.1:9001/
通配符含义
3 采用服务名称指定路由方式
## 2 ###################### 路由指定:服务指定 1 #############################
##将路径的/suibian/引到 eureka 的 e-book-product-provider 服务上
##规则:zuul.routes.路径名.path
##规则:zuul.routes.路径名.serviceId=eureka 的服务名
#zuul.routes.e-book-product-provider.path=/suibian/**
#zuul.routes.e-book-product-provider.serviceId=e-book-product-provider
## 3 ###################### 路由指定:服务指定 2 #############################
#zuul.routes 后面跟着的是服务名,服务名后面跟着的是路径规则,这种配置方式更简单。
zuul.routes.e-book-product-provider.path=/suibian/**
4 路由的排除方法
## 4 ###################### 路由排除:排除某几个服务 ###############################排除后,这个地址将为空
http://127.0.0.1:9030/e-book-product-provider/product/findAll
## 多个服务逗号隔开
#zuul.ignored-services=e-book-product-provider
## 5 ###################### 路由排除:排除所有服务 #############################
#由于服务太多,不可能手工一个个加,故路由排除所有服务,然后针对要路由的服务进行手工加
#zuul.ignored-services=*
#zuul.routes.e-book-order-provider.path=/e-book-order-provider/**
## 6 ###################### 路由排除:排除指定关键字的路径 #############################
# 排除所有包括/list/的路径
zuul.ignored-patterns=/**/findAll/**
zuul.routes.e-book-order-provider.path=/suibian/**
5 路由的添加前缀方法
##http://127.0.0.1:9030/suibian/product-provider/product/findAll
zuul.prefix=/suibian
zuul.routes.e-book-product-provider.path=/product-provider/**
四、自定义网关过滤器
1 编写网关过滤器
1.1创建项目
修改 pom 文件
<project
修改配置文件
spring.application.name=zuul-gateway-filter
server.port=9020
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
创建过滤器
package
2 过滤器类型
3 Zuul 请求的生命周期
4 采用网关过滤器实现权限验证
需求:在网关过滤器中通过 Token 判断用户是否登录
4.1创建项目
修改pom文件添加依赖
<project
修改配置文件
spring.application.name=zuul-gateway-example
server.port=9020
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
创建 AccessFilter
package
5 网关过滤器执行顺序与 post 类型演示
5.1网关过滤器执行顺序演示
AccessFilter
package
AccessFilter 2
/**
post 类型演示
/**
6.采用网关过滤器对系统异常同一处理
6.1创建 ErrorFilter
/**
创建处理异常响应的控制器
/**