1.官网:https://spring.io/projects/spring-cloud-gateway#learn
2.API网关在项目中的作用:
(1)可以动态路由前端的请求到各个服务,网关可以实时感知注册中心某个服务是上线还是下线,总是能将请求路由到正确的位置。
(2)每个请求过来后期可能需要加上权限,鉴权,监控,如果将这些功能写在各个服务上,这样出现很多重复开发,我们可以让客户端不直接请求各个服务,而是先去请求API网关,由网关代转给各个服务,可以在网关层对这些统一的功能进行处理。
3.
3.gateway几个基本概念:
(1)Route:路由
(2)predicate:断言
(3)Filter: 过滤
请求到达网关,网关先利用断言来判断请求是否符合某个路由规格,如果符合,则将请求按路由规则路由到指定地方,去这些指定地方需要经过一系列Filter进行过滤。
4.在项目中创建一个网关模块,同时需要将网关注册到注册中心,这样网关才能发现其他服务是否在线。 (配置这些参照前面博客)
配置完后启动gateway网关模块:
这里报错数据库url地址没有配置,原因书引入了common中由mybatis中相关依赖,但网关模块不需要数据库连接,所以在启动类中可以排除数据库有关的自动配置:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
5.测试gateway的路由和断言:
在项目中bootsrap.application:
#当前服务的名字
spring.application.name=gulimail-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1
spring.cloud.nacos.config.namespace=bc5f11a6-111d-4634-a599-5bfeab1c4942
在配置中心中:gulimail-gateway.yml:
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
-id: qq_route
uri: https://www.qq.com
predicates:
-Query=url,qq
nacos:
discovery:
server-addr: 127.0.0.1
application:
name: gulimail-gateway
server:
port: 88
然后启动项目:访问路径:localhost:88?url=baidu
会自动跳转到百度