第一章 spring ali bababgateway简单介绍
目录
前言
一、网关是什么?
二、springgateway中如何进行服务平滑迁移?
1. spring ali baba gateway 集成
(二)nacos 配置
2.springgateway 组成
总结
随着目前市场上大多数微服务架构网关采用springcloud gateway网关以webflux、netty、reator组成的网关,当然也有hong 网关,zuul网关等。这里着重以gateway展开分析。
网关 大致理解为接口组件管家,通过接口组件管家统一规划化,抽象化,便于管理级维护
该题目主要针对gateway权重设置的考察。
可以这样回答:集成nacos 配置中心,使用nacos 动态刷新机制,设置相同的组,设置的相同的uri 设置不同的断言权重比例,进行平滑迁移。
在断言中predicates 设置weight 权重分配比例,权重主要事项:
每个路由的uri 保持一致,例如下面的路由配置,- id: weight_high 和- id: weight_low 设置相同的
url,其中 - Weight 设置权重的比例
- Weight=group1, 8 其中 group1 自定义组的组的名称 ,可以自行定义,"8" 是指 在group1组下 请求率达80%.
- Weight=group1, 2 其中 group1 自定义组的组的名称 ,可以自行定义,"8" 是指 在group1组下 请求率达20%.
spring:
cloud:
gateway:
routes:
- id: weight_high
uri: https://weighthigh.org
predicates:
- Weight=group1, 8
- id: weight_low
uri: https://weightlow.org
predicates:
- Weight=group1, 2
具体详情可联系作者授权。git 地址: https://gitee.com/t-zhanxf/gate-way.git
(一)pom依赖
这里整合了springboot 、springcloud、springgateway、nacos
org.springframework.boot spring-boot-dependencies 2.6.3 pom import org.springframework.cloud spring-cloud-dependencies 2021.0.0 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 3.1.0 pom import com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config
内容如下:
[
{
"id":"butool-cloud-test",
"order":0,
"predicates":[
{
"args":{
"pattern":"/gateway/provider/**"
},
"name":"Path"
}
],
"uri":"http://localhost:8070/",
"filters":[
{
"name":"AuthorToken"
},
{
"name":"StripPrefix",
"args":{
"parts":"1"
}
}
]
}
]
gateway 组成
gateway 主要由id、order、predicates、uri、filters构成。
(一)id属性
一组路由主键,保持唯一即可,指定某个服务一组服务api ,exg: 路由到butool-cloud-test 应 用,可定义成 "id":"butool-cloud-test"。
(二)iorder属性
一组路由的优先级,其值越小,顺序靠前。
(三)ipredicates属性
断言规则,用于路由规则的匹配,包含两部分
1.name 路由规则匹配名称
2.args 理由规则匹配参数配置
如下图所示:
(四)uri属性
uri 需要转发的路径, 一组服务url 前缀 exg:http://localhost:8070/
(五)filters 过滤器
自定义过滤器 实现 GatewayFilter Ordered ,实现服务鉴权、操作日志等
如下:
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 鉴权验证
* @author zxf
*/
public class AuthorGateWayFilter implements GatewayFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("token");
if("test".equals(token)){
return chain.filter(exchange);
}
// 标记此次请求没有权限,并且结束这次请求
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
//请求结束
return exchange.getResponse().setComplete();
}
/**
* 优先级
* @return
*/
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE+2;
}
}
以上就是今天要讲的内容,本文仅仅简单介绍了gateway及使用场景、相关面试题。