网关Gateway
网关旨在为微服务架构提供一种简答有效的同意的API入口,负载服务请求路由、组合及协议转换,并且基于Filter链的方式提供了权限认证,监控,限流等功能。
网关优点:1.性能强 2.功能强大:内置了很多实用的功能,如:转发 监控 限流等 3.容易扩展
网关缺点:依赖Netty与WebFlux(spring5.0),学习成本高 ,需要spring boot2.0及以上的版本次才支持
网关需要进行的配置:
第一步:添加相关依赖。
注意:添加完这个依赖不能添加web依赖,会起冲突
-
<!-- 配置网关依赖,基于Netty去写的。加了这个依赖不能加web依赖-->
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-gateway</artifactId>
-
</dependency>
-
<!-- 服务发现依赖-->
-
<dependency>
-
<groupId>com.alibaba.cloud</groupId>
-
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
-
</dependency>
-
<!-- 限流依赖-->
-
<dependency>
-
<groupId>com.alibaba.cloud</groupId>
-
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
-
</dependency>
-
<!-- 在限流上显示网关依赖-->
-
<dependency>
-
<groupId>com.alibaba.cloud</groupId>
-
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
-
</dependency>
第二步:添加application.yml相关配置:
其中:路由是gateway最基本的组件之一,表示一个具体的路由信息载体
id:路由表示符,路由名称
uri:路由执行的目的地,客户端请求最终被转发到的微服务
predicate:断言 谓词 条件判断,当返回的都是true时才会执行路由
filter: 过滤器,用于修改请求和响应信息
lb:指从nacos中按照名称获取微服务,并遵循负载均衡策略,同时简易开发阶段打开gateway日志
-
server:
-
port: 9000
-
spring:
-
application:
-
name: sso-gateway #通过网关进行访问。
-
cloud:
-
nacos:
-
discovery: #服务注册端口
-
server-addr: localhost:8848
-
config: #配置中心端口
-
server-addr: localhost:8848
-
file-extension: yml #配置文件后缀名
-
sentinel: #配置限流端口
-
transport:
-
dashboard: localhost:8180
-
eager: true #开启通过服务注册中心的serbiceId创建路由
-
gateway:
-
routes: #路由
-
- id: router01 #资源服务路由名称
-
uri: lb://sso-resource #lb表示负载均衡 后面是需要进行负载均衡的服务名
-
predicates: #匹配规则
-
- Path=/sso/resource/** #设置访问路径 以及规则
-
filters:
-
- StripPrefix=1
-
- id: router02 #认证服务路由名称
-
uri: lb://sso-auth #lb表示负载均衡 后面是需要进行负载均衡的服务名
-
predicates: #谓词对象,可以定义多个谓词逻辑
-
- Path=/sso/oauth/**
-
filters:
-
- StripPrefix=1 #去掉第一层路径
-
globalcors: #跨域配置(写到配置文件的好处是可以将其配置写到配置中心)
-
corsConfigurations: #所有跨域配置只是针对ajax请求,因为ajax请求不支持跨域
-
'[/**]':
-
allowedOrigins: "*"
-
allowedHeaders: "*"
-
allowedMethods: "*"
-
allowCredentials: true
-
logging: #日志
-
level:
-
org.springframework.cloud.gateway: debug
-
第三步:当你完成配置后 启动网关项目,检查sentinel控制台网关菜单。启动时,需要添加jvm参数:
-Dcsp.sentinel.app.type=1
基于请求属性限流
自定义API维度限流
自定义API分组,是一种更细的限流规则定义,它允许我们利用sentinel提供的API,将请求路径进行分组,然后在组上设置限流规则即可
定义流控网关返回值:
-
-
public class GatewayConfig {
-
public GatewayConfig(){
-
GatewayCallbackManager.setBlockHandler( new BlockRequestHandler() {
-
-
public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
-
Map<String,Object> map=new HashMap<>();
-
map.put("state",429);
-
map.put("message","two many request");
-
String jsonStr=JSON.toJSONString(map);
-
return ServerResponse.ok().body(Mono.just(jsonStr),String.class);
-
}
-
});
-
}
-
}
其中,Mono 是一个发出(emit)0-1个元素的Publisher对象。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjagfi
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01