IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第36篇 rabbitmq DefaultCredentialsRefreshService 源码分析 -> 正文阅读

[大数据]第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. 这里核心概念,失效策略, 注册,注销
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:40:01  更:2021-08-12 16:40:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:37:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码