网关服务——Spring Cloud Gateway
为什么要用网关?
1.请求路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当路由的目标服务有多个时,还需要做负载均衡。
2.权限控制:网关作为微服务的入口,需要校验用户是否具有请求资格,如果没有资格就要进行拦截。
3.限流:当流量过高时,在网关中按照微服务能够接受的速度来放行请求,避免服务器压力过大。
架构图
快速入门
1.创建SpringBoot工程,引入网关依赖
点击查看代码
<!--网关-->
<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>
2.编写启动类
3.编写基础配置和路由规则
点击查看代码
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 网关路由配置
- id: user-service # 路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
4.启动网关服务进行测试
总结网关搭建步骤
1.创建项目,引入nacos服务发现和gateway依赖
2.配置application.yml,包括基本服务信息,nacos地址,路由。
路由配置包括:
1.路由id:路由的唯一标识
2.路由目标uri:路由的目标地址,http代表固定地址,lb://服务名-代表根据服务名负载均衡
3.路由断言predicates:判断路由的规则
4.路由过滤器filters:对请求或响应做处理
Gateway跨越问题
什么是跨越问题?
跨域:域名不一致就是跨域,主要包括域名不同和域名相同端口不同两种情况。
跨域问题就是指浏览器禁止请求的发起者与服务器发生跨ajax请求,请求被浏览器拦截的问题。
解决方案:CROS
解决跨域问题:在gateway服务的application.yml文件中,添加下面的配置:
点击查看代码
spring:
cloud:
gateway:
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]': #指要拦截哪些请求,/**表示拦截所有请求
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:8090"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix