分布式锁 使用看门狗机制 如果任务线程异常退出怎么保证锁会被释放呢

2023-03-22 11:29:09 +08:00
 noble4cc
看门狗会自动给锁续期 如果任务线程异常退出了 没有手工释放锁 这样不就无限续期了吗
750 次点击
所在节点    问与答
5 条回复
orange2023
2023-03-22 14:14:53 +08:00
任务线程异常退出了,那对应的 thread 就没有了呀,watch dog 也不会续期了
orange2023
2023-03-22 14:23:59 +08:00
@orange2023 如果你指的是 Redission 的话,watch dog 只是对于 Redisson instance 而言的,你需要自己处理代码中的异常行为。既任务线程出现异常,应该手动释放锁。
noble4cc
2023-03-22 14:48:47 +08:00
@orange2023 是的 现在也是这么做的
我的疑问 Redisson 看门狗这种 如果任务线程异常退出 Redisson 的守护线程也会停止续期吗 目前看了下源码没找到
orange2023
2023-03-22 15:40:30 +08:00
@noble4cc google 了一下,Redisson 的守护线程不会停止续期。
想了一下,”任务线程异常退出,设法让 watch dog 感知“,可以加入心跳检测机制(或者语言本身可以获取特定线程的状态)。那么多长的“心跳”间隔算过期这件事,又是一个类似”加一个 30S 锁之后,解锁时可能任务还没执行完,加入 watch dog 自动续期”的问题。
noble4cc
2023-03-22 16:29:13 +08:00
@orange2023 是的 我看了下源码 入参就一个线程 ID 内部也没判断线程是否存活之类的
网上也有类似的提问 解答一般是如果线程不存在了 进程一般也不存在了 就不会续期到时候就直接过期了
如果要实现完美些看来得再加个守护线程 监控这些工作线程的状态 如果发现不存活 直接上释放锁 不过这又增加了系统设计复杂度 感觉也没什么必要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/926119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX