微服务-网关

1、依赖:nacos服务发现,gateway

<!-- 网关也是一个微服务,需要引入服务发现依赖,随后配置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-gateway</artifactId>
</dependency>

2、配置:路由ID,路由目标,路由断言,路由过滤器

spring:
        cloud:
                gateway:
                        routes:
                                - id: route_1                   # 路由标识,唯一即可
                                  uri: lb://document-service    # 路由的目标地址
                                  predicates:                   # 路由断言,判断请求是否符合规则
                                        - Path=/api/document/**         # 路径断言,判断路径是否以/document开头,若符合,请求将被路由到 document-service 微服务
                                - id: route_2
                                  uri: lb://user-service
                                  predicates:
                                        - Path=/api/user/**

3、路由断言工厂:RoutePredicate Factory

Spring 提供了11种基本的路由断言工厂,如果接收到的请求不符合所配置的任何一种路由规则,则返回请求发送方404错误

名称 说明 示例
After 必须是某个时间点之后的请求 - After=2022-01-20T17:42:47.789-07:00[America/Denver]
Before 必须是某个时间点之前的请求 -Before=2031-04-13T15:14:45.433+08:00[Asia/Shanghai]
Between 必须是某两个时间点之间的请求 -Between=2022-01-20T17:42:47.789-07:00[America/Denver], 2031-04-13T15:14:45.433+08:00[Asia/Shanghai]
Cookie 请求必须包含某些cookie -Cookie=chocolate, ch.p
Header 请求必须包含某些header - Header=X-Request-Id, \d+
Host 请求必须是访问某个host(域名) - Host=ftp.somehost.org, www.anotherhost.org
Method 请求方式必须是指定方式 - Method=GET, POST
Path 请求路径必须符合指定规则 - Path=/document/{id}, /user/**
Query 请求参数必须包含指定参数 - Query=name, Jack 或者 -Query=name
RemoteAddr 请求者的IP必须是指定范围 - RemoteAddr=192.168.1.1/24
Weight 权重处理

4、过滤器工厂:GatewayFilter Factory

Spring提供了31种不同的路由过滤器工厂

名称 说明
AddRequestHeader 给当前请求添加一个请求头
RemoveRequestHeader 移除请求中的一个请求头
AddResponseHeader 给响应结果中添加一个响应头
RemoveResponseHeader 从响应结果中移除一个响应头
RequestRateLimiter 限制请求的流量
... ...

例如:给所有进入docuemnt-service的请求添加一个请求头:Truth=tanmujin is a handsome man!

spring:
        cloud:
                gateway:
                        routes:
                                - id: route_1
                                        uri: lb://document-service
                                        predicates:
                                                - Path=/document/**
                                        filters:
                                                - AddRequestHeader=Truth, tanmujin is a handsome man!

默认过滤器:如果要对所有的路由都生效,则可以将过滤器工厂写到default下

spring:
        cloud:
                gateway:
                        default-filters:
                                - AddRequestHeader=Truth, tanmujin is a handsome man!

全局过滤器 GlobalFilter:全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的,而GlobalFilter的逻辑需要自己些代码实现。

网关的跨域问题

实践中,方案2较稳妥

方案1、在网关服务中做如下配置:

spring:
        cloud:
                gateway:
                        globalcors:
                                add-to-simple-url-handler-mapping: true         #解决Options请求(浏览器发出的询问服务器是否允许跨域的这个请求)被拦截问题
                                cors-configurations:
                                        '[/**]':
                                                allowedOrigins:
                                                        - "http://localhost:8090"
                                                        - "http://www.tanmujin.com"
                                                allowMethods:
                                                        - "GET"
                                                        - "POST"
                                                        - "DELETE"
                                                        - "PUT"
                                                        - "OPTIONS"
                                                allowHeaders: "*"
                                                allowCredentials: true
posted @   谭五月  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示