微服务整合sentinel

这里写自定义目录标题

  • 背景
    • 实现方式——sentinel
    • 使用规则——热点规则
    • 实现逻辑
    • 注意

背景

提供服务给第三方,但是需要给的权限码进行限制,并且可动态配置,包括限流的接口,限流次数,限流日期,限流ip,限流时间

实现方式——sentinel

  1. 控制台(Dashboard):可以通过控制台进行限流,并通过配置实现(如果不通过配置,服务重启以后配置就没了),但是我当时测试了一下没成功,可能哪里没弄对,可参照官方文档(https://sentinelguard.io/zh-cn/docs/dynamic-rule-configuration.html)
  2. 核心库:使用提供的api进行限流控制(本文的处理方式中,提供服务的服务实例只有一个,在多个实例场景下应该会有问题)
    官方文档:https://sentinelguard.io/zh-cn/docs/quick-start.html

使用规则——热点规则

选择热点规则是因为,需要实现几秒调用一次,流量规则不好使
官网说明:
热点参数规则(ParamFlowRule)类似于流量控制规则(FlowRule):
微服务整合sentinel_第1张图片微服务整合sentinel_第2张图片

实现逻辑

1.将动态配置的限流数据存储到库中,并将规则放置到redis中,给一个热点规则修改的标识

redisService.setCacheObject("ParamFlowRuleFlag",true);
redisService.setCacheObject("ParamFlowRule",jsonString);

2.调用前进行限流处理

@Before("@annotation(requestLimit)")
public void doBefore(JoinPoint point, RequestLimiter requestLimit) throws Throwable {
   
	//如果规则为空或者标识为已修改则对规则进行更新
	if(CollUtil.isEmpty(ParamFlowRuleManager.getRules()) || (boolean)redisService.getCacheObject("ParamFlowRuleFlag")){
   
		updateParamFlowRule();
	}
    //获取请求
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.

你可能感兴趣的:(微服务,sentinel,java)