![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网关
lizz666
不积跬步无以至千里
展开
-
SpringCloudGateway源码解析:RemoveCachedBodyFilter
package org.springframework.cloud.gateway.filter;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import reactor.core.publisher.Mono;import org.springframework.core.Ordered;import org.springframework.core.io.buf...原创 2020-11-17 17:48:21 · 741 阅读 · 0 评论 -
Spring Cloud Gateway不同频率限流(每分钟,每小时,每天)
场景在使用SCG限流功能时,默认情况下是按秒限流,即一秒允许多少个请求,现需要根据不同时间频率进行限流,即限制每分钟、每小时或者每天限流。分析SCG的限流使用的guava的ratelimiter工具,令牌桶模式,参数包括以下3个:replenishRate: 每次补充令牌数量 burstCapacity: 令牌桶最大容量,突发请求数量 requestedTokens: 每次请求消耗令牌的数量使用方案 每秒只能请求1次 - name: Request原创 2020-10-09 16:57:32 · 4164 阅读 · 3 评论 -
Spring Cloud Gateway灰度发布(预发/金丝雀)
SCG中支持简单的灰度功能,可以根据配置分配流量。配置关键配置项目:- Weight={group}, {weigth}application:需要分流的组名 weigth:流量百分比,最大值100.spring: application: name: fw-gateway cloud: gateway: routes: - id: r_hi uri: lb://hi predicates: -原创 2020-09-10 16:57:21 · 2339 阅读 · 0 评论 -
Spring Cloud Gateway中多规则限流(RequestRateLimiter覆盖问题)
场景在SCG中配置多个RequestRateLimiter时,只能支持一个速率。源码分析跟踪源码发现package org.springframework.cloud.gateway.route;...public class RouteDefinitionRouteLocator implements RouteLocator, BeanFactoryAware, ApplicationEventPublisherAware {... //定时刷新所有gatew.原创 2020-09-09 13:37:50 · 4832 阅读 · 0 评论 -
Spring cloud gateway熔断不重试问题
场景在SCG中配置默认重试和熔断规则如下,当调用超时接口时未触发重试规则进行重试,直接使用了熔断规则返回熔断信息。spring: cloud: gateway: httpclient: connect-timeout: 1000 #连接超时时间 ,动态 response-timeout: 3s #请求读取超时时间,动态 default-filters: - name: Retry #重试 ar原创 2020-08-24 17:55:04 · 1644 阅读 · 1 评论 -
DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
/现象线上spring cloud gateway时,偶尔出现几DataBufferLimitException异常,堆栈信息如下:org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitExc...原创 2020-09-04 11:08:15 · 14292 阅读 · 2 评论 -
Spring Cloud Gateway:使用ReadBodyPredicateFactory读取request的body,可能无法匹配404
需求获取request中的body内容解决方案SCG自带ReadBodyPredicateFactory断言,可以将body中的内容读取到exchange对象中,使用exchange.getAttribute("cachedRequestBodyObject")获取,但是当body为空时,无法匹配该路由,导致返回404错误。常规用法GCS route配置如下 - id: r_fapi #测试 uri: lb://LIZZ-GATEWAY原创 2020-06-08 18:23:35 · 8562 阅读 · 13 评论 -
Error reactor.netty.ReactorNetty$InternalNettyException: java.nio.channels.ClosedChannelException
现象使用Spring Cloud Gateway时,在线上偶尔出现异常,但是很少且很难复现。在压测的最后几条日志也会出现,当时没有放在心上,线上是不是会有error告警,故此花时间研究一番。[4eee5339] Error [reactor.netty.ReactorNetty$InternalNettyException: java.nio.channels.ClosedChannelException] for HTTP GET "/xxx", but ServerHttpResponse原创 2020-05-30 18:51:48 · 4123 阅读 · 0 评论 -
Nginx状态码499原因分析和处理
nginx日志如下:request_time:单位ms,请求处理时间,指nginx从客户端接受第一个字节开始,到把请求结果数据全部发送给客户端,并写入ngnix日志后为止到全部处理时间。(request processing time in seconds with a milliseconds resolution; time elapsed between the first bytes were read from the client and the log write after the原创 2020-05-30 18:46:03 · 10500 阅读 · 1 评论 -
Spring Cloud Gateway中uri和path一样时路径被删除,导致返回404
源码如下:默认情况下会对eureka上的所有服务创建path=/service_id/**的路由匹配public class GatewayDiscoveryClientAutoConfiguration {public static List<PredicateDefinition> initPredicates() { ArrayList<Pre...原创 2020-05-29 17:54:40 · 2594 阅读 · 0 评论 -
SpringCloud:Eureka微服务跨分区调用region、zone、gateway
PS:未经测试,后补目的系统为分区架构,减少中心化服务,避免单点风险。region1和region2为完全独立分区,分区数据无交集,互不依赖。region1中的处理由于特殊原因用到region2中的服务,需要提供技术支持。思路新架构不影响独立region内部架构 region直接互不影响 通过gateway处理转发逻辑并进行转发,如果是同一个region直接路由到内部微...原创 2020-04-30 20:07:11 · 2670 阅读 · 0 评论 -
SpringCloud:Gateway聚合Swagger
场景当微服务中集成了swagger时,gateway中的过滤器也会对其进行过滤,经常会应该一些检验规则导致无法访问。我这是增加了服务的权限校验,导致无法访问swagger相应路径,虽然增加了免校验规则,但由于相关页面较多,这种方式显得较为笨重。PS:filter中的忽略规则自行处理。可参考SpringCloud:Gateway网关中自定义过滤器方法1:忽略路径将下列路径跳过校验...原创 2020-04-28 16:05:27 · 13674 阅读 · 15 评论 -
SpringCloud:Gateway网关中自定义过滤器
目的实现自定义的过滤规则,如token校验,权限校验等。方法实现GlobalFilter和Ordered。GlobalFilter:公共过滤器Ordered:过滤优先级,根据处理顺序修改大小。自定义过滤器import com.gateway.code.ResponseCode;import com.gateway.core.utils.PathUtil;import...原创 2020-04-28 16:00:44 · 3426 阅读 · 1 评论 -
Token插件:Auth0和jjwt对比
Auto0工具类import com.auth0.jwt.JWT;import com.auth0.jwt.JWTCreator;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.exceptions.JWTVerificationException;import com.auth0.jwt.interfac...原创 2020-03-03 11:29:41 · 8489 阅读 · 2 评论 -
Spring Cloud Gateway压测(wrk、k8s、nginx)
压测环境K8S容器中安装wrk,scg(Spring Cloud Gateway)发布在k8s容器中,使用nginx访问scg,scg转发到nginx的html页面。k8s容器配置:4核、8G内存wrk:https://github.com/wg/wrkjvm配置:基本不占用内存,配置1G即可。scg配置:spring: application: name: ...原创 2020-01-14 15:43:43 · 2313 阅读 · 0 评论 -
Spring Cloud Gateway使用及配置
目录引入依赖包配置文件Spring相关配置路由配置限流规则代码限流原理自定义过滤器公用过滤器引入依赖包 <dependencies> <!-- gateway核心包 --> <dependency> <groupId>org.springframe...原创 2019-12-26 15:48:18 · 13207 阅读 · 0 评论 -
技术名词:突刺现象
突刺现象:指在一定时间内的一小段时间内就用完了所有资源,后大部分时间中无资源可用。举例:在限流方法中的计算器算法,设置1s内的最大请求数为100,在前100ms已经永远了100个请求,则后面900ms将无法处理请求,这就是突刺现象。解决办法漏斗算法:使用等待队列存放存需要执行的请求,再通过每秒100的处理节奏处理请求,减少突发情况,单等待队列也必须有一定限制。 令牌桶算法:使用一个1...原创 2019-12-24 17:12:27 · 1267 阅读 · 0 评论 -
Zuul和Gateway对比
Zuul1.x使用bio的连接方式,基本已淘汰Zuul2特性身份验证和安全性—识别每个资源的身份验证要求,并拒绝不满足这些要求的请求。 洞察和监控-跟踪边缘的有意义的数据和统计数据,以便为我们提供准确的生产视图。 动态路由-根据需要将请求动态路由到不同的后端群集。 压力测试-逐渐增加到集群的流量以评估性能。 减载-为每种类型的请求分配容量,并删除超过限制的请求。 静...原创 2019-12-17 11:16:52 · 10695 阅读 · 0 评论