一、该问题的重现步骤是什么?
1. 使用RedisLock对方法重复提交控制
二、问题咨询?
RedisLock 锁的粒度是session用户当前访问 还是 整个集群下这个方法
另外如何通过el或者@去获取AuthUtil中的参数
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
Bladex v4.2.0.release windows
@RedisLock(value = "lock:tool:sign:tool",param = "T(org.springblade.core.secure.utils.AuthUtil).getUserId()")
现在用的这个方法可以拿到
目前是项目全局的控制,可以直接通过springel获取调用bean的方法。
也可以自己注册自定义函数,让调用更加优雅。
可以这样理解吗?比如用户A,不加额外的param动态参数,调用了方法abc(),此时即便是集群环境,因为用的锁的redis,意味着A的调用没有结束谁都不能进入该方法
是的,没有param,那就是统一的一个key,不管哪个服务来调用,key都是一样的。上一个请求没结束,key就不会释放,之后来的请求rediskey还在自然就被锁住无法调用了。
过程发现这个注解
@RateLimiter
但是在文档中没有找到对应的使用方法,自行尝试了
1、开启分布式配置
blade:
#分布式锁配置
lock:
enabled: true
address: redis://127.0.0.1:6379
password: 123456
2、在方法上增加注解
@RateLimiter(value = "lock:tool:sign:ttl",param = "T(org.springblade.core.secure.utils.AuthUtil).getUserId()")
或者
@RateLimiter(value = "lock:tool:sign:ttl")
发现没有生效,跟其源码
RedisRateLimiterAspect
发现注解没有生效。
3、同样配置使用注解@RedisLock可以进去
RedisRateLimiterAspect
遂求指导
显示有问题
意思就是同样的注解RedisLock可以进到RedisLockAspect跟踪
但是使用RateLimiter进不去RedisRateLimiterAspect
猜测没有生效。是有什么配置没有到位吗
找到了为啥不生效了 需要增加这个配置。
扫一扫访问 Blade技术社区 移动端