namespace CloudGaming.Shared.Admin.MessageHandler;
///
/// 消费日志
///
public class WriteLogHandler : IBus
{
public string topic => "WriteInLog";
private readonly static ConcurrentBag InsertList = [];
private readonly static object _lock = new();
private readonly IRepository _sysOperationLogRepository;
public WriteLogHandler(IRepository sysOperationLogRepository)
{
_sysOperationLogRepository = sysOperationLogRepository;
}
public async Task HandlerAsync(SysOperationLog data)
{
lock (_lock)
{
if (InsertList.Count > 200)
{
_sysOperationLogRepository.InsertRange(InsertList);
InsertList.Clear();
}
InsertList.Add(data);
}
await Task.CompletedTask;
}
///
/// 10分钟检测一次 InsertList
///
[Scheduled("0 0/2 * * * ?", remark: "2分钟检测一次 InsertList")]
public string Run()
{
lock (_lock)
{
if (InsertList.Count > 0)
{
_sysOperationLogRepository.InsertRange(InsertList);
}
InsertList.Clear();
}
return "ok";
}
}