第36篇 rabbitmq DefaultCredentialsRefreshService 源码分析

默认的凭证的刷新服务,类似token失效,它是一个周期性的服务, token续约的服务, 使用Function <Duration, Long> refreshDelayStrategy, 一旦凭证提供者已经续约了,将会回调注册,重新发送一个新的秘密到AMQP的连接 , 这里也使用构造器模式

  • DefaultCredentialsRefreshService 实现了CredentialsRefreshService接口

1、CredentialsRefreshService 接口

  • 凭证续约接口

1.1、方法

方法名描述图示
String register注册需要续约实体
void unregister取消注册
boolean isApprochingExpiration是否过期失效

2、DefaultCredentialsRefreshService

2.1、成员变量

变量名描述
SheduledExecutorService scheduler周期刷新token续约
ConcurrentMap<CredentialsProvider, CredentialsProviderState> credentialsProviderStates证书提供状态map
boolean privateSheduler是否为私有周期任务(传入,还默认生成的)
Function<3, Duration> refreshDelayStrategy延迟刷新策略
Function<Duration, Boolean> approachingExpirationStrategy是否失效,一般需要提前续约

2.2、方法

方法名描述图示
构造方法一般使用DefaultCredentialsRefreshServiceBuilder构建
ratioRefreshDelayStrategy(double ratio)延迟刷新,实例化RatioRefreshDelayStrategy对象
fixedDelayBeforeExpirationRefreshDelayStrategy(Duration duration)间隔时间执行,实例化 FixedDelayBeforeExpirationRefreshDelayStrategy
fixedTimeApproachingExpirationStrategy(Duration limitBeforeExpiration)固定失效时间 FixedTimeApproachingExpirationStrategy
String register()注册1
void unregister()取消注册(移除注册信息)
2.2.1、String register()

image-20210810202114324

3、RatioRefreshDelayStrategy

  • 实现了Function<Duration, Duration>接口

  • 说明输入参数是Duration, 输出也是Duration (秒)

  • 实现apply方法

    •  return Duration.ofSeconds((long) ((double) duration.getSeconds() * ratio));
      
  • 举个例子,比如一个token有效期是60秒,且ratio是0.8, 那么它刷新时间就是 48秒的时候

4、FixedDelayBeforeExpirationRefreshDelayStrategy

  • 减去一个延迟时间间隔 (分钟)

  •  Duration refreshTimeBeforeExpiration = timeBeforeExpiration.minus(delay);
                if (refreshTimeBeforeExpiration.isNegative()) {
                    return timeBeforeExpiration;
                } else {
                    return refreshTimeBeforeExpiration;
                }
    

5、FixedTimeApproachingExpirationStrategy

  • 毫秒

  •  return timeBeforeExpiration.toMillis() <= limitBeforeExpiration;
    
  • 输入时间少于等于限制时间

6、Registration

  • 注册对象

6.1、成员变量

变量名描述
Callable refreshAction刷新动作
AtomicInteger errorHistory0错误历史
String id注册id

7、CredentialsProviderState

  • 凭证提供状态

7.1、成员变量

变量名描述
CredentialsProvider credentialsProvider凭证
Map<String, Registration> registrations注册map(id是注册id
AtomicReference<ScheduledFuture<?>> refreshTask刷新任务
AtomicBoolean refreshTaskSet刷新task的set

7.2、方法

方法名描述图示
构造方法只传递 credentialsProvider
add(Registration)添加注册对象
maybeSetRefreshTask(Supplier<ScheduledFuture<?>>)可能刷新task任务
refresh()刷新方法1
unregister(registrationId)移除注册信息
7.2.1、refresh() (图示1)

image-20210810190404982

  • 需要注意

    1. 刷新CredentialProvider

    2. 刷新Registration(注册信息)

8、 DefaultCredentialsRefreshServiceBuilder

  • 默认构建器

8.1、成员变量

  • 方法名描述
    ScheduledExecutorService scheduler周期任务
    Function<Duration, Duration> refreshDelayStrategy默认是0.8 * 失效时间失效策略
    Function<Duration, Boolean> approachingExpirationStrategyttl -> false判断是否失效,重新获取

9、总结

  1. 这里可以用于通用token刷新实现方案
  2. 这里核心概念,失效策略, 注册,注销
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值