fix(task): TaskPoller Redis 分布式锁操作增加异常捕获,避免 Redis 故障时任务轮询崩溃

This commit is contained in:
fawney19
2026-03-07 03:14:48 +08:00
parent 95bc742057
commit 7b0908cd87

View File

@@ -220,9 +220,17 @@ class TaskPollerService:
if not self.redis: if not self.redis:
return "no_redis" return "no_redis"
token = str(uuid4()) token = str(uuid4())
acquired = await self.redis.set( try:
self.adapter.lock_key, token, nx=True, ex=self.adapter.lock_ttl acquired = await self.redis.set(
) self.adapter.lock_key, token, nx=True, ex=self.adapter.lock_ttl
)
except Exception as exc:
logger.warning(
"[{}] Redis lock acquire failed (best-effort skip): {}",
self.adapter.task_type,
exc,
)
return "no_redis"
return token if acquired else None return token if acquired else None
async def _release_redis_lock(self, token: str) -> None: async def _release_redis_lock(self, token: str) -> None:
@@ -234,7 +242,14 @@ class TaskPollerService:
end end
return 0 return 0
""" """
await self.redis.eval(script, 1, self.adapter.lock_key, token) try:
await self.redis.eval(script, 1, self.adapter.lock_key, token)
except Exception as exc:
logger.warning(
"[{}] Redis lock release failed (will expire via TTL): {}",
self.adapter.task_type,
exc,
)
_task_poller: TaskPollerService | None = None _task_poller: TaskPollerService | None = None