SpringCloud Gateway 集 成 Sentinel

网友投稿 600 2022-11-05

SpringCloud Gateway 集 成 Sentinel

SpringCloud Gateway 集 成 Sentinel

限流规则的维度

网关维度

代表网关访问该服务时的限流规则 粒度粗–全局的配置

Api 分组维度

代表网关访问该接口时的限流规则 粒度细–局部配置

规则配置具体参考

GatewayFlowRule:网关限流规则,针对 API Gateway 的场景定制的限流规则,可 以针对不同 route 或自定义的 API 分组进行限流,支持针对请求中的参数、Header、来 源 IP 等进行定制化的限流。

ApiDefinition:用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合。 比如我们可以定义一个 API 叫 my_api,请求 path 模式为 /foo/** 和 /baz/** 的都 归到 my_api 这个 API 分组下面。限流的时候可以针对这个自定义的 API 分组维度进行 限流

其中网关限流规则 GatewayFlowRule 的字段解释如下: resource:资源名称,可以是网关中的 route 名称或者用户自定义的 API 分组名称。

resourceMode:规则是针对 API Gateway 的 route(RESOURCE_MODE_ROUTE_ID) 还是用户在 Sentinel 中定义的 API 分组(RESOURCE_MODE_CUSTOM_API_NAME),默认是 route。

grade:限流指标维度,同限流规则的 grade 字段。

count:限流阈值

intervalSec:统计时间窗口,单位是秒,默认是 1 秒。

controlBehavior:流量整形的控制效果,同限流规则的 controlBehavior 字段, 目前支持快速失败和匀速排队两种模式,默认是快速失败。

burst:应对突发请求时额外允许的请求数目。

maxQueueingTimeoutMs:匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排 队模式下生效。

paramItem:参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会 被转换成普通流控规则;否则会转换成热点规则。其中的字段: parseStrategy : 从 请 求 中 提 取 参 数 的 策 略 , 目 前 支 持 提 取 来 源 IP (PARAM_PARSE_STRATEGY_CLIENT_IP)、Host(PARAM_PARSE_STRATEGY_HOST)、任 意 Header ( PARAM_PARSE_STRATEGY_HEADER ) 和 任 意 URL 参 数 (PARAM_PARSE_STRATEGY_URL_PARAM)四种模式。 fieldName:若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL 参数名称。 pattern:参数值的匹配模式,只有匹配该模式的请求属性值会纳入统计和流控;若为 空则统计该请求属性的所有值。(1.6.2 版本开始支持) matchStrategy : 参 数 值 的 匹 配 策 略 , 目 前 支 持 精 确 匹 配 (PARAM_MATCH_STRATEGY_EXACT)、子串匹配(PARAM_MATCH_STRATEGY_CONTAINS)

添加 Controller 获取限流规则

相关依赖

com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway com.alibaba.csp sentinel-datasource-nacos

修改配置文件

server: port: 80spring: application: name: gateway-server cloud: nacos: discovery: server-addr: nacos-server:8848 # 修改本机的host 文件 gateway: discovery: locator: enabled: true lower-case-service-id: true # admin-service ADMIN-SERVICE /admin-service/** -> 微服务(ADMIN-SERVICE) routes: - id: admin-service_router uri: lb://admin-service # 转发到那个目的地 predicates: - Path=/admin/** - id: test_router uri: # 转发到那个目的地 predicates: - Path=/test #通过网关来完成2中维度的限流:网关 + API分组的限流 sentinel: datasource:# ds1.file:# file: classpath:gw-flow.json# ruleType: gw_flow ds1.nacos: #com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource 使用Nacos持久化我的sentinel 数据时,需要添加nacos-datasource的依赖 serverAddr: nacos-server:8848 dataId: gw-flow ruleType: gw_flow# ds2.file:# file: classpath:api-group.json# ruleType: gw_api_group ds2.nacos: serverAddr: nacos-server:8848 dataId: api-group ruleType: gw_api_group # 我们演示了sentinel-dashboard 的规则的定义,而且规则定义好了后,我们的网关能立马的感知到(生效)(nacos无法感知),但是我们下次重启,会丢失规则。--》nacos

在nacos上添加限流规则

添加 Controller 获取限流规则

@RestControllerpublic class GatewayFlowRulesController { /** * 获取当前系统的限流策略 */ @GetMapping("/gw/flow/rules") public Set getCurrentGatewayFlowRules(){ return GatewayRuleManager.getRules(); } /** * 获取定义的api分组 */ @GetMapping("/gw/api/groups") public Set getApiGroups(){ return GatewayApiDefinitionManager.getApiDefinitions(); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:node.js+express+mongodb 小电商项目实战
下一篇:async+phantomjs制作nodejs的小说爬虫
相关文章

 发表评论

暂时没有评论,来抢沙发吧~