一、基础
微服务网关 Gateway,听起来高大上,其实就是我们用来管理微服务请求的一个入口。它有几个核心功能,比如身份认证、权限校验、服务路由、负载均衡和请求限流。
技术上,我们常用的有 gateway 和 zuul。接下来,咱们来看看怎么搭建一个网关服务。
搭建网关服务
- 创建一个新的服务,然后引入 SpringCloudGateway 和 nacos 服务发现的依赖。
- 编写路由配置及 nacos 地址。
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-gateway
server:
port: 10010 #网关端口
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
gateway:
routes:
- id: user-service #路由标识,名字必须唯一
uri: lb://userservice #路由的目标地址,lb负载均衡,userservice服务名称
predicates: #路由断言,判断请求是否符合规则
- Path=/user** #路径断言:判断路径是否以user开头,如果是则符合
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
二、路由断言
路由断言是判断请求是否符合特定规则的关键。比如,你可以配置路由 ID、URI(支持 lb 和 http 两种)和路由断言工厂。
三、路由的过滤器配置
路由过滤器可以在请求进入网关时进行处理,Spring 提供了 30 种过滤工厂。比如,你可以给所有进入 userservice 的请求添加一个请求头。
eg:给所有进入userservice的请求添加一个请求头:
Truth=itcast is freaking awesome!
实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器:
四、过滤器执行顺序
请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter。它们的执行顺序是按照 order 值从小到大进行排序的。
五、网关的跨域问题处理
跨域问题,就是浏览器禁止请求的发起者与服务端发生跨域 ajax 请求。解决方法有很多,这里就不展开了。
小结与拓展
微服务网关 Gateway 是一个强大的工具,可以帮助我们更好地管理微服务。这篇文章只是简单介绍了它的基本用法,还有很多高级功能等待你去探索。
我是陈景序,来自 websoft网络软件专家(www.phpwebsoft.com)。如果你对微服务网关 Gateway 或者其他 Web 开发技术感兴趣,欢迎关注我们的网站,了解更多内容。
