TJC.Cyclops.Service
2026.4.13.1
dotnet add package TJC.Cyclops.Service --version 2026.4.13.1
NuGet\Install-Package TJC.Cyclops.Service -Version 2026.4.13.1
<PackageReference Include="TJC.Cyclops.Service" Version="2026.4.13.1" />
<PackageVersion Include="TJC.Cyclops.Service" Version="2026.4.13.1" />
<PackageReference Include="TJC.Cyclops.Service" />
paket add TJC.Cyclops.Service --version 2026.4.13.1
#r "nuget: TJC.Cyclops.Service, 2026.4.13.1"
#:package TJC.Cyclops.Service@2026.4.13.1
#addin nuget:?package=TJC.Cyclops.Service&version=2026.4.13.1
#tool nuget:?package=TJC.Cyclops.Service&version=2026.4.13.1
🔧 Cyclops.Service
📝 项目概述
Cyclops.Service 是企服版框架中的服务层核心引擎,为您的应用程序提供强大的服务层基础设施和后台任务管理功能! 🚀
我们精心设计的组件主要关注两个核心方面:
- 标准化服务层:为应用程序提供统一、规范的服务层实现模式
- 后台任务框架:提供强大且灵活的后台任务处理能力
通过统一的服务模式和后台任务管理,Cyclops.Service使开发者能够轻松构建可靠、可扩展的企业级应用服务,让您的业务逻辑更加清晰、可维护。
✨ 为什么选择 Cyclops.Service?
- 标准化服务模式:提供统一的服务层实现规范,提高代码一致性
- 强大的后台任务:支持定时任务、父子任务、并行任务等复杂场景
- 依赖注入集成:与.NET依赖注入系统无缝集成
- 完善的异常处理:内置统一的异常处理机制
- 详细的日志记录:集成日志功能,便于服务操作的跟踪和调试
- 可扩展性:设计灵活,易于扩展和定制
🎯 核心功能模块
1. 🏗️ 基础服务框架
1.1 基础服务类
- BaseService:所有服务类的基类,提供了服务的基本功能和生命周期管理
- BaseServiceT<T>:泛型版本的基础服务类,允许在服务中指定实体类型
1.2 服务特性
- 依赖注入集成:与.NET依赖注入系统深度集成,支持自动依赖注入
- 异常处理:内置统一的异常处理机制,确保服务层的异常能够被适当捕获和处理
- 日志记录:集成日志功能,便于服务操作的跟踪和调试
- 服务生命周期:支持不同的服务生命周期管理(Singleton、Scoped、Transient)
2. ⚙️ 后台任务框架
2.1 任务基类
- BaseJobService:后台任务的基础实现,所有后台任务都应继承此类
- BaseSubJobService:子任务的基类,用于实现可分解的复杂任务
- ParentJobService:父任务服务,用于管理和协调多个子任务
2.2 任务接口
- IJob:所有作业任务必须实现的接口,定义了作业的基本操作
2.3 任务管理
- JobServiceLoader:作业服务加载器,负责发现和初始化系统中的作业服务
- JobInfosCache:作业信息缓存,用于存储和管理作业的元数据
- JobInfo:作业信息模型,包含作业的各种属性和状态信息
2.4 后台服务基础设施
- BaseBackgroundService:基于.NET的BackgroundService的增强实现,提供更丰富的后台任务管理功能
- 任务状态管理:支持任务状态的跟踪和管理
- 任务重试机制:内置任务失败重试功能
- 任务调度:支持基于时间的任务调度
🛠️ 技术栈
- 开发框架:.NET 8.0 - 利用最新的.NET特性和性能改进
- 项目类型:类库(Class Library)
- 核心依赖:
- Cyclops.Common - 提供基础工具类和通用功能
- Microsoft.Extensions.DependencyInjection - 依赖注入框架
- Microsoft.Extensions.Hosting - 后台服务支持
- Microsoft.Extensions.Logging - 日志记录功能
📦 环境依赖要求
- .NET 8.0 SDK 或更高版本
- 支持的平台:Windows、Linux、macOS
- IDE推荐:Visual Studio 2022、Visual Studio Code
- 其他依赖:
- 引用的Cyclops.Common项目
- 可选:配置中心(如Consul、etcd)用于动态配置
🚀 安装与配置
🔍 安装方式
NuGet包管理器
Install-Package Cyclops.Service
.NET CLI
dotnet add package Cyclops.Service
PackageReference
<PackageReference Include="Cyclops.Service" Version="1.0.0" />
⚙️ 基本配置
依赖注入配置
在应用程序的启动类中配置服务注入:
// 在Program.cs或Startup.cs中
using Cyclops.Service;
var builder = WebApplication.CreateBuilder(args);
// 注册服务
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddScoped<IProductService, ProductService>();
// 其他服务注册...
// 注册后台任务服务
builder.Services.AddHostedService<CleanupJob>();
builder.Services.AddHostedService<ScheduleTask>();
// ...
🎯 配置建议
- 服务生命周期:根据服务的性质选择合适的生命周期(Singleton、Scoped、Transient)
- 后台任务:对于长时间运行的后台任务,确保正确处理取消令牌
- 依赖注入:通过构造函数注入依赖,避免服务定位器模式
- 日志配置:配置适当的日志级别,便于问题排查
- 错误处理:实现全局异常处理,确保服务稳定性
📝 核心功能代码示例
1. 🏗️ 创建和使用基础服务
以下示例展示了如何创建和使用基础服务:
// 定义服务接口
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);
}
}
2. ⚙️ 创建和配置后台任务
2.1 基本后台任务
以下示例展示了如何创建基本的后台任务:
// 定义后台任务
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>();
// 其他服务注册...
});
2.2 定时后台任务
以下示例展示了如何创建定时执行的后台任务:
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()
{
// 同步数据逻辑实现
}
}
2.3 父子任务模式
以下示例展示了如何使用父子任务模式处理复杂任务:
// 子任务实现
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);
}
}
⚠️ 使用注意事项
1. 服务命名和日志
- 有意义的命名:所有继承自BaseService或BaseJobService的类,应当设置有意义的JobName或类名,便于日志跟踪
- 关键日志:在关键操作点添加适当的日志记录,便于问题排查
- 日志级别:根据操作的重要性选择适当的日志级别(Info、Warn、Error)
2. 异常处理
- 捕获异常:在服务实现中捕获并处理异常,避免将未处理的异常传播到上层
- 后台任务异常:对于后台任务,特别注意异常处理,确保任务不会因为异常而意外终止
- 异常信息:在捕获异常时,记录详细的异常信息,便于问题定位
3. 资源管理
- 资源释放:在长时间运行的后台任务中,确保适当释放资源,特别是数据库连接和文件句柄
- 取消处理:当任务被取消时,及时清理资源,避免资源泄漏
- 连接池:对于数据库操作,使用连接池管理数据库连接
4. 并发控制
- 分布式锁:对于可能被多个实例同时执行的任务,实现必要的分布式锁或任务调度机制
- 数据一致性:避免多个任务实例同时修改同一数据,确保数据一致性
- 并行度控制:对于并行执行的任务,控制并行度,避免系统过载
5. 任务监控
- 状态监控:实现任务状态监控机制,及时发现任务执行异常
- 告警机制:对于关键任务,考虑添加告警机制,当任务执行失败时及时通知
- 健康检查:为后台服务添加健康检查端点,便于监控服务状态
6. 依赖注入
- 构造函数注入:确保所有服务依赖通过构造函数注入,便于测试和维护
- 避免服务定位器:避免在服务内部直接实例化其他服务,应通过依赖注入获取
- 依赖生命周期:确保依赖的生命周期与服务的生命周期匹配
7. 性能优化
- 资源控制:对于频繁执行的任务,注意控制资源使用,避免系统过载
- 批处理:考虑使用批处理和异步操作提高任务执行效率
- 缓存策略:对于频繁访问的数据,实现适当的缓存策略
8. 服务生命周期
- 生命周期选择:了解并正确使用不同的服务生命周期(Singleton、Scoped、Transient)
- 避免依赖冲突:避免在Singleton服务中注入Scoped依赖
- 作用域管理:对于需要跨请求共享的服务,使用适当的作用域管理
9. 配置管理
- 配置外部化:将任务执行参数、定时间隔等配置信息外部化,便于运行时调整
- 动态配置:考虑使用配置中心动态更新任务配置,无需重启服务
- 配置验证:在服务启动时验证配置的有效性
10. 测试策略
- 单元测试:为服务层编写单元测试,确保业务逻辑正确
- 模拟对象:使用模拟对象(Mock)隔离服务依赖,提高测试效率
- 集成测试:考虑为关键任务编写集成测试,验证端到端功能
- 性能测试:对于高频执行的任务,进行性能测试,确保满足性能要求
🤝 贡献者
我们欢迎社区贡献!如果您有任何改进建议或功能需求,欢迎提交PR或Issue。
- yswenli:核心开发者
📋 版本信息
📄 许可证
保留所有权利
🎉 结语
Cyclops.Service 致力于为您的应用程序提供强大、灵活的服务层基础设施和后台任务管理功能。我们相信,通过标准化的服务模式和强大的后台任务框架,您可以更专注于业务逻辑的实现,构建出更可靠、更可扩展的企业级应用。
如果您有任何问题或建议,欢迎与我们联系!让我们一起构建更好的服务层解决方案! 🚀
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- TJC.Cyclops.Common (>= 2026.4.13.1)
- TJC.Cyclops.DI (>= 2026.4.13.1)
- TJC.Cyclops.Orm (>= 2026.4.13.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on TJC.Cyclops.Service:
| Package | Downloads |
|---|---|
|
TJC.Cyclops.Web.Core
企服版框架中api核心功能项目,基于aspnetcore集成di、jwt、swagger、codefirtst、支持多种常见数据库、nacos配置中心、统一接口回复参数、全局异常捕获、全局接口日志、防重放攻击、图形验证码、快捷上下文对象、上传下载、数据导入导出等功能 |
|
|
TJC.Cyclops.Speech
语音转换工具类 |
|
|
TJC.Cyclops.Wechat
企服版框架中微信对接相关业务核心项目 |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.4.13.1 | 0 | 4/13/2026 |
| 2026.3.30.1 | 142 | 3/30/2026 |
| 2026.3.26.1 | 124 | 3/26/2026 |
| 2026.3.24.1 | 133 | 3/24/2026 |
| 2026.3.12.2 | 149 | 3/12/2026 |
| 2026.3.12.1 | 149 | 3/12/2026 |
| 2026.2.26.1 | 142 | 2/26/2026 |
| 2026.2.4.1 | 159 | 2/4/2026 |
| 2026.1.15.1 | 172 | 1/15/2026 |
| 2026.1.14.2 | 161 | 1/14/2026 |
| 2026.1.14.1 | 159 | 1/14/2026 |
| 2026.1.13.2 | 169 | 1/13/2026 |
| 2026.1.13.1 | 179 | 1/13/2026 |
企服版框架中服务处理相关,包括常规Service的集成处理和后台任务JobService的处理