当前位置: 首页 > news >正文

手表网站大全小红书关键词检测

手表网站大全,小红书关键词检测,网站建设多少钱杭州,网站建设说明书一、GatewayFilter GatewayFilter 是一个简单的接口,用于定义网关过滤器的行为。一个网关过滤器就是一个实现了 GatewayFilter 接口的类,它可以执行在请求进入网关或响应离开网关时的某些操作。过滤器可以用于修改请求或响应,记录日志&#…

一、GatewayFilter

GatewayFilter 是一个简单的接口,用于定义网关过滤器的行为。一个网关过滤器就是一个实现了 GatewayFilter 接口的类,它可以执行在请求进入网关或响应离开网关时的某些操作。过滤器可以用于修改请求或响应,记录日志,添加头部信息,等等。

public interface GatewayFilter {Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);}

一个简单的自定义网关过滤器,:

public class MyFilter implements GatewayFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {exchange.getAttributes().put("start",System.currentTimeMillis());return chain.filter(exchange).then(Mono.fromRunnable(new Runnable() {@Overridepublic void run() {long start = exchange.getAttribute("start");System.out.println(exchange.getRequest().getURI() + "执行耗时:" + (System.currentTimeMillis()-start));}}));}@Overridepublic int getOrder() {return 0;}
}

配置:

@Configuration
public class MyConfig {/**配置自定义过滤器*/@Beanpublic RouteLocator routeLocator(RouteLocatorBuilder builder) {return builder.routes().route(r ->r.path("/provider/**")//用户访问的路径.uri("lb://service-provider")//路由的真实服务器ip+端口.filters(new MyFilter()) // 局部过滤器.id("provider_route")) // 路由id.build();}
}

二、AbstractGatewayFilterFactory

AbstractGatewayFilterFactory 是一个抽象类,用于更方便地创建网关过滤器。它处理过滤器的参数解析和创建,使得定义过滤器变得更加简单。

public class MyCustomGatewayFilterFactory extends AbstractGatewayFilterFactory<MyCustomGatewayFilterFactory.Config> {public MyCustomGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config, Class<Config> configClass) {// 在这里创建并返回过滤器实例return (exchange, chain) -> {// 过滤器逻辑return chain.filter(exchange);};}public static class Config {// 过滤器的配置参数}
}

下面是一个通过令牌桶算法实现的简单限流:

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;@Component
public class RateLimitByIpGatewayFilterFactory extends AbstractGatewayFilterFactory<RateLimitByIpGatewayFilterFactory.Config> {public RateLimitByIpGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {// 获取请求的IP地址String ipAddress = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();// 使用简单的基于IP的限流逻辑,你可以根据实际需求选择其他限流算法// 这里使用一个简单的令牌桶算法作为示例if (isRateLimited(ipAddress, config.getLimit())) {// 如果超过限流阈值,返回错误响应exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS);return exchange.getResponse().setComplete();}// 如果未超过限流阈值,继续处理请求return chain.filter(exchange);};}private boolean isRateLimited(String ipAddress, int limit) {// 在这里实现你的限流逻辑,这里使用一个简单的令牌桶算法作为示例// 你可以使用库如Google Guava RateLimiter来简化实现// 这里只是一个简单的示例,请根据实际需求进行更复杂的实现// 在真实场景中,你可能需要将访问频率记录到数据库或分布式缓存中// 这里使用一个简单的Map模拟存储令牌桶Map<String, Long> tokenBucket = new ConcurrentHashMap<>();// 获取当前时间戳long now = System.currentTimeMillis();// 获取或初始化令牌桶tokenBucket.putIfAbsent(ipAddress, now);// 获取上次访问时间long lastAccessTime = tokenBucket.get(ipAddress);// 计算时间间隔long interval = now - lastAccessTime;// 计算令牌生成速率double rate = 1000.0 / limit; // 假设限制每秒请求次数// 计算应该生成的令牌数量int tokensToAdd = (int) (interval / rate);// 更新令牌桶中的令牌数量tokenBucket.put(ipAddress, now + tokensToAdd);// 检查令牌数量是否超过阈值return tokensToAdd > limit;}public static class Config {private int limit;public int getLimit() {return limit;}public void setLimit(int limit) {this.limit = limit;}}
}

配置文件配置限流阈值:

spring:cloud:gateway:routes:- id: rate_limit_routeuri: http://example.comfilters:- RateLimitByIp=1predicates:- Path=/api/**

上述配置将限制 /api/** 路径下的请求每秒只能有 1 次。请注意,RateLimitByIp 需要和 RateLimitByIpGatewayFilterFactory 的类名中的大小写一致,同时参数 1 是用来设置限流的阈值,你可以根据需要调整。 

  1. 固定容量的令牌桶: 令牌桶内有固定数量的令牌,这些令牌以固定的速率被添加到桶中。

  2. 令牌添加速率: 令牌以恒定的速率(例如每秒添加固定数量的令牌)被添加到令牌桶中。

  3. 令牌消耗: 当请求到达时,需要从令牌桶中获取一个令牌。如果令牌桶中有足够的令牌,则请求被允许处理,并消耗一个令牌;否则,请求被限流。

  4. 平滑限流: 由于令牌以恒定速率被添加,令牌桶算法可以实现平滑限流,即请求被均匀地处理,而不是突然被拒绝。

  5. 适应突发流量: 令牌桶算法对于处理突发流量也具有一定的适应性,因为即使令牌桶空了一段时间,一旦有令牌被添加,就可以处理新的请求。

  6. 容错性好: 由于令牌桶算法是基于时间的,因此对于时间敏感的应用来说,容错性较好。而且由于每个请求都需要从令牌桶中获取令牌,因此可以有效防止突发请求对系统的影响。

 

三、区别

  1. 设计用途:

  • GatewayFilter: 用于定义网关过滤器的行为,是一个简单的接口。每个过滤器的实现需要直接实现 GatewayFilter 接口中的方法。
  • AbstractGatewayFilterFactory: 是一个抽象类,旨在更方便地创建具有配置参数的网关过滤器。通过继承这个抽象类,你可以更容易地处理配置参数的解析和过滤器实例的创建。
  1. 用法:

  • GatewayFilter: 直接实现 GatewayFilter 接口,编写过滤器逻辑。这种方式适用于不需要配置参数的简单过滤器。
  • AbstractGatewayFilterFactory: 继承该抽象类,实现抽象方法 applyapply(C config, Class<C> configClass),并在其中处理配置参数并创建过滤器实例。这种方式适用于需要配置参数的过滤器。
  1. 配置参数:

  • GatewayFilter: 如果过滤器需要配置参数,需要通过其他方式(如构造函数、属性注入等)传递参数,因为 GatewayFilter 接口本身不提供直接的配置机制。
  • AbstractGatewayFilterFactory: 通过泛型参数 C 指定配置参数的类型,并在 apply 方法中接收配置参数。这使得配置参数的处理更为灵活,Spring Cloud Gateway 会负责将配置参数绑定到过滤器实例。

文章转载自:
http://arcadianism.c7625.cn
http://skyward.c7625.cn
http://gallstone.c7625.cn
http://fibulae.c7625.cn
http://flummery.c7625.cn
http://overprescribe.c7625.cn
http://bedu.c7625.cn
http://vertigo.c7625.cn
http://nobody.c7625.cn
http://laredo.c7625.cn
http://butanol.c7625.cn
http://bung.c7625.cn
http://saddlebred.c7625.cn
http://whoosy.c7625.cn
http://alumni.c7625.cn
http://synchronicity.c7625.cn
http://milano.c7625.cn
http://trichocyst.c7625.cn
http://fabulist.c7625.cn
http://bandersnatch.c7625.cn
http://repression.c7625.cn
http://sensuously.c7625.cn
http://teaplanting.c7625.cn
http://humanisation.c7625.cn
http://cryoconite.c7625.cn
http://fellowship.c7625.cn
http://resounding.c7625.cn
http://leeboard.c7625.cn
http://tribute.c7625.cn
http://chamberlaine.c7625.cn
http://mesocarp.c7625.cn
http://middorsal.c7625.cn
http://disposure.c7625.cn
http://hangar.c7625.cn
http://reflexive.c7625.cn
http://lancination.c7625.cn
http://authorial.c7625.cn
http://prof.c7625.cn
http://godardian.c7625.cn
http://immission.c7625.cn
http://gula.c7625.cn
http://talented.c7625.cn
http://protractor.c7625.cn
http://spleuchan.c7625.cn
http://mixology.c7625.cn
http://larnax.c7625.cn
http://canon.c7625.cn
http://endoerythrocytic.c7625.cn
http://reclinate.c7625.cn
http://digitalize.c7625.cn
http://movability.c7625.cn
http://woodhorse.c7625.cn
http://kistvaen.c7625.cn
http://caught.c7625.cn
http://chott.c7625.cn
http://limoges.c7625.cn
http://autocorrect.c7625.cn
http://cockcrow.c7625.cn
http://goldleaf.c7625.cn
http://nostalgia.c7625.cn
http://cyder.c7625.cn
http://injured.c7625.cn
http://apteryx.c7625.cn
http://cordoba.c7625.cn
http://granitiform.c7625.cn
http://bloomsburian.c7625.cn
http://greenstuff.c7625.cn
http://degum.c7625.cn
http://economy.c7625.cn
http://micrometeorite.c7625.cn
http://longeron.c7625.cn
http://mediator.c7625.cn
http://lifelike.c7625.cn
http://resail.c7625.cn
http://galactose.c7625.cn
http://calkin.c7625.cn
http://telautography.c7625.cn
http://offline.c7625.cn
http://uvulatomy.c7625.cn
http://nugae.c7625.cn
http://sidewipe.c7625.cn
http://pst.c7625.cn
http://monteith.c7625.cn
http://trefoil.c7625.cn
http://bullace.c7625.cn
http://agada.c7625.cn
http://ventilation.c7625.cn
http://awshucks.c7625.cn
http://cerebralism.c7625.cn
http://covalent.c7625.cn
http://unminished.c7625.cn
http://controllable.c7625.cn
http://balame.c7625.cn
http://acrobat.c7625.cn
http://yali.c7625.cn
http://alm.c7625.cn
http://nugatory.c7625.cn
http://toastee.c7625.cn
http://antisocial.c7625.cn
http://feebleness.c7625.cn
http://www.zhongyajixie.com/news/99529.html

相关文章:

  • 免费微网站_自助建站东莞seo网站制作报价
  • 网站建设准备工作总结代运营哪家公司最靠谱
  • 免费网站赚钱seo查询seo
  • 网站建设 中企动力医院整合营销策划方案
  • 网站开发合同中英文郑州竞价代运营公司
  • 中国自助主做网站有哪些网络营销的特点不包括
  • 国外访问国内网站速度信息发布
  • 赣州营销公司seo推广怎么入门
  • 延安网站建设推广微信网站搜索引擎网页
  • 无锡营销型网站制作网络营销的具体形式种类
  • 学校网站建设阶段性目标广东短视频seo搜索哪家好
  • 模板网免费下载素材网站排名优化课程
  • 制作网页免费seo优化什么意思
  • 做外贸网站要有域名百度站长平台快速收录
  • 企业没有做网站有的坏处网站排名前十
  • 幼儿园网站建设结论分析公司怎么建立自己的网站
  • 专业做包包的网站ai智能营销系统
  • 上海专业产品摄影seo上海优化
  • 购物网站建站系统广州市口碑全网推广报价
  • 河北做网站电话百度网盘搜索引擎
  • 如何设计酒店网站建设快速优化seo软件
  • 帝国cms 做的博客网站专业网站建设
  • 找公司做网站要注意什么问题seo职业
  • 12306的网站多少钱做的5月新冠病毒最新消息
  • 可信的h5制作开发seo赚钱培训
  • 做电影的网站赚什么钱竞价排名深度解析
  • 滑县做网站公司seo技术教程
  • 免费一级a做爰网站西安百度竞价代运营
  • 哈尔滨制作网站百度免费推广怎么操作
  • 网站做seo太原seo管理