聊聊rocketmq-streams的ILeaseService

本文主要探讨了rocketmq-streams中的ileaseservice。

聊聊rocketmq-streams的ILeaseService

ILeaseService接口定义了租约和锁的相关操作,主要包括hasLease、startLeaseTask、lock、tryLocker、unlock、holdLock、hasHoldLock和queryLockedInstanceByNamePrefix等方法。BasedLesaseImpl抽象类实现了ILeaseService接口,并依赖于ILeaseStorage来管理租约信息。startLeaseTask方法会创建一个ApplyTask,并以固定间隔调度执行该任务。

ApplyTask内部会调用applyLeaseTask方法,如果已有租约,则更新租约时间;如果没有租约,则判断是否可以获取租约,如果可以,则尝试通过tryGetLease方法获取租约。tryGetLease方法会先通过queryValidateLease查询租约信息,如果没有租约则尝试插入,如果租约已过期则根据版本号更新,如果已有租约则判断是否是自己获取了租约,是则更新租约信息。

LeaseServiceImpl继承了BasedLesaseImpl,tryLocker方法会根据等待时间循环执行lock方法,lock方法则调用tryGetLease方法,unlock方法则更新租约信息并移除内存记录。holdLock方法通过hasHoldLock判断是否持有锁,如果有则返回,没有则调用tryGetLease尝试获取锁。

ILeaseStorage接口定义了管理租约信息的相关方法,包括updateLeaseInfo、countLeaseInfo、queryInValidateLease、queryValidateLease、queryValidateLeaseByNamePrefix和addLeaseInfo。DBLeaseStorage实现了ILeaseStorage接口,使用jdbc来实现这些方法。

总结:rocketmq-streams的LeaseService通过数据库实现了租约和锁的功能,适用于主备场景的切换。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享