using Coravel.Invocable; using FreeRedis; using Microsoft.Extensions.DependencyInjection; using System; using System.Threading.Tasks; using VideoAnalysisCore.Common; namespace VideoAnalysisCore.Job { /// /// 设备心跳上报任务 /// public class DeviceHeartbeatJob : IInvocable { public Task Invoke() { try { var redis = AppCommon.Services.GetService(); if (redis == null) return Task.CompletedTask; var deviceId = AppCommon.Config.ID.ToString(); // 1. 发送心跳 (设置一个带过期时间的Key) // 只有当程序正常运行时,这个Key才会不断被续期 // 过期时间设为 60秒,Job每30秒执行一次 redis.Set(RedisExpandKey.DeviceHeartbeat(deviceId), DateTime.Now.ToString(), 60); } catch (Exception ex) { Console.WriteLine($"心跳任务异常: {ex.Message}"); } return Task.CompletedTask; } } }