src/server/jobs/health.ts
此代码来自构建时的仓库快照。修改源码后重新构建即可更新。
import { createRedis } from './queue';
import { hasHeartbeat } from './heartbeat';
export async function queueHealth(scope?: string) {
const redis = createRedis(false);
let timer!: ReturnType<typeof setTimeout>;
try {
// 上限包含连接与读取两段:Redis ready 后不再响应,也不能挂住页面查询。
return await Promise.race([
(async () => {
await new Promise<void>((resolve, reject) => {
redis.once('ready', resolve);
redis.once('error', reject);
});
return { redis: true, worker: await hasHeartbeat(redis, scope) };
})(),
new Promise<never>((_, reject) => {
timer = setTimeout(() => reject(new Error('健康查询超时')), 2000);
}),
]);
} catch {
return { redis: false, worker: false };
} finally {
clearTimeout(timer);
redis.disconnect();
}
}