对于网关的理解-Gateway
2024-01-07 17:34:51
因为在使用微服务的时候,会有多端请求。会产生以下问题:
1.客户端需要记住每一个微服务的url
2.主机端口也会直接暴露
3.每一个微服务都需要认证
4.存在跨域问题
所以网关可以解决统一访问、隐藏真实的服务器地址、网关进行统一认证、解决跨域问题、限流等问题。
所以网关只需要处理网址,基本上只需要处理配置文件和启动类
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': #匹配向网关发送的所有请求
allowedOrigins: "*" #任何一个服务器都允许跨域操作
allowedMethods:
- POST
- GET
- DELETE
- PUT
routes: # 路由
- id: chessgame #自定义路由唯一标识
uri: lb://USER # 网关管理的访问地址
predicates: # 过滤的路径(只有路径匹配了url请求,网关才会处理请求)
- Path=/user/**
filters: # 可以对于url的请求进行拦截处理
- PrefixPath=/api #所有请求到网关的路径前添加这段内容
- StripPrefix=1 #忽略请求路径中的设定数值内容路径层级数量 #在真是使用时就关闭忽略
#网关限流配置
# - name: RequestRateLimiter #限流工具类的名称
# args:
# key-resolver: "#{@ipKeyResolver}" # 使用 SpEL表达式按名称引用 bean
# #每秒钟只能处理一个请求,测试效果明显
# redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充速率
# redis-rate-limiter.burstCapacity: 1 #令牌桶总容量
将启动类发送到注册中心去
<!--网关,与web有冲突的-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--实现令牌桶-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
使用gateway的限流工具需要进行在启动类中添加bean
/***
* IP地址进行限流
*@return
*/
@Bean(name="ipKeyResolver")
public KeyResolver userKeyResolver(){
return new KeyResolver(){
@Override
public Mono<String> resolve(ServerWebExchange exchange){
//获取远程客户端IP
String hostName = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
return Mono.just(hostName);
}
};
}
文章来源:https://blog.csdn.net/weixin_55990599/article/details/135426912
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!