什么是网关?
在日常生活中,我们可能看过古装剧,其中就有城墙和大门,网关就相当于这个大门,城里面有很多好吃的好玩的,但是你也只能先从大门进去才能去享受。同样的,在我们微服务架构的项目中, 有各种各样的模块,但是我们可以添加网关,就相当于设置大门了。
网关的主要功能有
- 将所有请求统一经过网关
- 网关可以对这些请求进行检查
- 网关方便记录所有请求的日志
- 网关可以统一将所有请求路由(分配)到正确的模块\服务上
网关也是一个模块,所以我们要使用的时候要新建一个项目模块,然后添加依赖
<dependencies>
<!-- SpringGateway的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 网关负载均衡依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
然后配置yml配置文件
server:
port: 9000
spring:
application:
name: gateway
cloud:
nacos:
discovery:
# 网关也是微服务项目的一部分,所以也要注册到Nacos
server-addr: localhost:8848
gateway:
# routes就是路由的意思,下面的内容就是配置路由,它是一个数组类型的属性
routes:
# 数组类型属性赋值时,每个数组元素都要以"-"开头,一个"-"之后的所有内容,都是这个元素包含的值
# id表示当前路由的名称,和之前出现过的任何名字没有关联,唯一的要求就是不能和之后出现的路由id重复
- id: gateway-beijing
# uri配置路由的目标服务器,beijing是服务器注册到nacos的名称
# lb就是LoadBalance的缩写
uri: lb://beijing
# predicates是断言的意思,指满足某些条件的之后执行某些操作
predicates:
# predicates属性也是数组类型,赋值要以"-"开头
# 这个断言的含义就是如果访问网关项目的路径以/bj/开头,路由访问beijing服务器
# ↓ P要大写 **是通配任何路径
- Path=/bj/**
然后就可以启动项目了,注意其他的项目先起,网关最后起,道理也很好理解,门应该在最外面所以最后建造
注意!!哪个模块需要加入就必须添加依赖个配置
然后再配置网关的
server:
port: 9000
spring:
application:
name: gateway
cloud:
nacos:
discovery:
# 网关也是微服务项目的一部分,所以也要注册到Nacos
server-addr: localhost:8848
gateway:
discovery:
locator:
# 开启网关动态路由的配置
# 默认的路由规则:在网关端口号后,先编写要路由到的目标服务器
# 注册到Nacos的名称,再编写要访问的具体路径
# 例如 localhost:9001/bj/show -> localhost:9000/beijing/bj/show
enabled: true
动态路由:
上面的所有项目模块都需要在配置文件中指定路径来路由,非常的不萤杏花,可以通过动态路由让他自己找,我么就不用手动配了。
server:
port: 9000
spring:
application:
name: gateway
cloud:
nacos:
discovery:
# 网关也是微服务项目的一部分,所以也要注册到Nacos
server-addr: localhost:8848
gateway:
discovery:
locator:
# 开启网关动态路由的配置
# 默认的路由规则:在网关端口号后,先编写要路由到的目标服务器
# 注册到Nacos的名称,再编写要访问的具体路径
# 例如 localhost:9001/bj/show -> localhost:9000/beijing/bj/show
enabled: true
可以通在配置文件中这样配置完成他自动路由。
断言:断言的意思就是判断某个条件是否满足,不满足就访问不了,可以配很多东西(
- after 在什么时间之后可以访问
- before 时间之前
- between 时间之间
- cookie 携带什么cookie
- header 携带什么请求头
- method 用的什么请求方式
- path 路径
- query 指定参数,必须有
-
routes: - id: gateway-shanghai uri: lb://shanghai predicates: - Path=/sh/** # Query断言判断请求中是否包含指定的参数名称(username)的参数,如果不包含就发生404错误 - Query=username
其他还有一些不常用的,可以看看别的文章完成cv(哈哈)
过滤器:
这个过滤器在mvc过滤器链之前,而且可以通过这个过滤器加工,比如说加个参数
routes:
- id: gateway-shanghai
uri: lb://shanghai
filters:
- AddRequestParameter=age,18
也可以有其他功能,使用到我再更新。
因为网关也带了一个网页,就像tomcat,这俩就会冲突。我们在配置文件中可以通过配置解决。
spring:
main:
web-application-type: reactive
以上知识仅作为个人参考。如果有需要补充和指正的地方欢迎各位大佬不吝赐教!