No Data

gateway测试

原创  作者:斩雪碎光阴  发布于:2022年11月11日  阅读量:196
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  分类:  标签:

测试环境:window10+jdk11+Nacos 2.1.1+springboot2.6.13+Spring Cloud2021.0.4+Spring Cloud Alibaba2021.0.4.0+spring-cloud-gateway3.1.4+spring-cloud-starter-loadbalancer3.1.4

作用:微服务网关


一、文档、资源

Spring Cloud Alibaba中文文档:

https://github.com/alibaba/spring-cloud-alibaba/blob/2021.x/README-zh.md

Spring Cloud Alibaba的Spring Cloud Gateway、 Nacos Discovery Example示例:

https://github.com/alibaba/spring-cloud-alibaba/blob/2021.x/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme-zh.md

spring-cloud官网中的spring-cloud-gateway:

https://spring.io/projects/spring-cloud-gateway

github中的spring-cloud-gateway:

https://github.com/spring-cloud/spring-cloud-gateway

gateway网关服务(gai1):

链接: https://pan.baidu.com/s/1MWlA6CGtJ8TB1akwFMzZtA

提取码:1111

生产者服务(gai1-provider):

链接: https://pan.baidu.com/s/1U5AUGm-hXkEPUE8bUTPynA

提取码:1111


二、项目搭建

1.服务包括:nacos注册配置中心服务、gateway网关服务(gai1)、生产者服务(gai1-provider)

2.nacos服务、生产者服务搭建方式:

https://sgybk.zxsgy.cn/1/article12

3.gateway网关服务:

bootstrap.properties配置:

# 应用名称

spring.application.name=gai1

# 应用服务 WEB 访问端口

server.port=4002

#nacos地址

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

在nacos配置列表增加配置文件:

Data ID:gai1.properties

Group:DEFAULT_GROUP

配置格式:Properties

配置内容:

spring.cloud.gateway.routes[0].id=nacos-route-gai1-provider

spring.cloud.gateway.routes[0].uri=lb://gai1-provider

spring.cloud.gateway.routes[0].predicates[0].name=Path

spring.cloud.gateway.routes[0].predicates[0].args[pattern]=/gaip/**

id :路由唯一标示

uri :路由目标地址, http 代表固定地址, lb 代表根据服务名负载均衡

predicates:路由断言,按路径匹配,以/gaip开头就符合要求

发布

加pom依赖:

       org.springframework.cloud

       spring-cloud-starter-gateway

   

   

       org.springframework.cloud

       spring-cloud-starter-loadbalancer

   

不能加spring-boot-starter-web,否则会报错

加spring-cloud-starter-loadbalancer提供负载均衡支持,不加会报There was an unexpected error (type=Service Unavailable,status=503)


三、跨域问题

请求通过网关转发就有可能出现跨域问题

非简单请求(PUT、DELETE)等,需要先发送预检请求,只要当想要访问的服务器允许跨域时,才可以发送真实请求

使用nginx解决:部署为同一域

使用gateway解决:配置当次请求允许跨域


四、其他配置

1.路由断言工厂Route Predicate Factory

网关路由可以配置的内容包括:

路由 id :路由唯一标示

uri :路由目的地,支持 lb 和 http 两种

predicates :路由断言,判断请求是否符合要求,符合则转发到路由目的地

filters :路由过滤器,处理请求或响应

路由断言工厂:

在配置文件中写的断言规则被 Predicate Factory 读取并处理转变为路由判断的条件

Spring 提供了 11 种基本的 Predicate 工厂,具体见springcloud官网。

2.路由过滤器 GatewayFilter

Spring提供了31种不同的路由过滤器工厂,例如:AddRequestHeader

将过滤器工厂写到default-filters下对所有的路由都生效

3.全局过滤器

对所有路由都生效的可自定义逻辑的过滤器

实现 GlobalFilter 接口,添加 @Order 注解或实现 Ordered 接口

相关文章