企服版框架中服务处理相关,包括常规Service的集成处理和后台任务JobService的处理
License
—
Deps
2
Install Size
—
Vulns
✓ 0
Published
Jan 7, 2026
$ dotnet add package TJC.Cyclops.Common.ServiceCyclops.Common.Service是企服版框架中的核心服务处理库,提供了服务层的基础设施和后台任务管理功能。该项目主要关注两个核心方面:
通过统一的服务模式和后台任务管理,Cyclops.Common.Service使开发者能够轻松构建可靠、可扩展的企业级应用服务。
可以通过以下方式安装Cyclops.Common.Service包:
NuGet包管理器:
Install-Package TJC.Cyclops.Common.Service
.NET CLI:
dotnet add package TJC.Cyclops.Common.Service
在使用Cyclops.Common.Service之前,需要进行以下配置:
// 定义服务接口
public interface IUserService
{
Task<User> GetUserByIdAsync(int userId);
Task CreateUserAsync(User user);
}
// 实现服务
public class UserService : BaseService, IUserService
{
// 可以注入依赖项
private readonly IRepository<User> _userRepository;
public UserService(IRepository<User> userRepository)
{
_userRepository = userRepository;
}
public async Task<User> GetUserByIdAsync(int userId)
{
// 服务实现
return await _userRepository.FindByIdAsync(userId);
}
public async Task CreateUserAsync(User user)
{
// 服务实现
await _userRepository.InsertAsync(user);
}
}
// 注册服务到DI容器
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IUserService, UserService>();
// 其他服务注册...
}
// 在控制器或其他组件中使用服务
public class UserController : Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
var user = await _userService.GetUserByIdAsync(id);
return Ok(user);
}
}
// 定义后台任务
public class CleanupJob : BaseJobService
{
protected override string JobName => "数据清理任务";
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Logger.Info($"[{JobName}] 开始执行");
try
{
// 执行实际的清理逻辑
await CleanupOldDataAsync();
Logger.Info($"[{JobName}] 执行完成");
}
catch (Exception ex)
{
Logger.Error($"[{JobName}] 执行出错: {ex.Message}", ex);
}
}
private async Task CleanupOldDataAsync()
{
// 清理逻辑实现
// 例如删除超过90天的日志数据
}
}
// 注册后台任务到Host
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// 注册后台任务
services.AddHostedService<CleanupJob>();
// 其他服务注册...
});
public class ScheduleTask : BaseJobService
{
private readonly PeriodicTimer _timer;
private readonly TimeSpan _interval;
protected override string JobName => "定时同步任务";
public ScheduleTask()
{
// 设置定时间隔(每小时执行一次)
_interval = TimeSpan.FromHours(1);
_timer = new PeriodicTimer(_interval);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Logger.Info($"[{JobName}] 启动,间隔: {_interval.TotalHours}小时");
while (!stoppingToken.IsCancellationRequested &&
await _timer.WaitForNextTickAsync(stoppingToken))
{
try
{
Logger.Info($"[{JobName}] 开始执行");
// 执行定时任务逻辑
await SyncDataAsync();
Logger.Info($"[{JobName}] 执行完成");
}
catch (Exception ex)
{
Logger.Error($"[{JobName}] 执行出错: {ex.Message}", ex);
}
}
}
private async Task SyncDataAsync()
{
// 同步数据逻辑实现
}
}
// 子任务实现
public class EmailSendSubJob : BaseSubJobService
{
private readonly string _emailAddress;
private readonly string _subject;
private readonly string _body;
public EmailSendSubJob(string emailAddress, string subject, string body)
{
_emailAddress = emailAddress;
_subject = subject;
_body = body;
}
protected override string JobName => $"发送邮件到 {_emailAddress}";
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Logger.Info($"[{JobName}] 开始执行");
try
{
// 实际发送邮件的逻辑
await SendEmailAsync();
Logger.Info($"[{JobName}] 执行完成");
// 标记子任务完成
JobState = JobState.Completed;
}
catch (Exception ex)
{
Logger.Error($"[{JobName}] 执行出错: {ex.Message}", ex);
// 标记子任务失败
JobState = JobState.Failed;
ErrorMessage = ex.Message;
}
}
private async Task SendEmailAsync()
{
// 发送邮件实现
}
}
// 父任务实现
public class BatchEmailJob : ParentJobService
{
protected override string JobName => "批量发送邮件任务";
public async Task StartBatchEmailAsync(List<(string email, string subject, string body)> emails)
{
Logger.Info($"[{JobName}] 开始处理,总邮件数: {emails.Count}");
// 创建子任务列表
var subJobs = emails.Select(e =>
new EmailSendSubJob(e.email, e.subject, e.body)).ToList();
// 添加子任务并启动
AddSubJobs(subJobs);
// 等待所有子任务完成
await WaitForAllSubJobsAsync();
// 汇总结果
var completed = subJobs.Count(j => j.JobState == JobState.Completed);
var failed = subJobs.Count(j => j.JobState == JobState.Failed);
Logger.Info($"[{JobName}] 处理完成,成功: {completed}, 失败: {failed}");
}
}
// 使用父子任务
public class EmailService : BaseService
{
private readonly BatchEmailJob _batchEmailJob;
public EmailService(BatchEmailJob batchEmailJob)
{
_batchEmailJob = batchEmailJob;
}
public async Task SendBatchEmailsAsync(List<(string email, string subject, string body)> emails)
{
await _batchEmailJob.StartBatchEmailAsync(emails);
}
}
服务命名和日志:
异常处理:
资源释放:
并发控制:
任务监控:
依赖注入:
性能考虑:
服务生命周期:
配置外部化:
测试策略:
保留所有权利