找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3727

积分

0

好友

495

主题
发表于 2 小时前 | 查看: 4| 回复: 0

在 .NET 高性能与云原生场景下,任务调度库的选型直接影响应用的启动速度、内存占用和可观测性。TickerQ 正是为此而生:一个零反射、完全 AOT 就绪的现代任务调度库,内置实时仪表盘,无需付费插件。

GitHubgithub.com/Arcenox-co/TickerQ [1]
文档tickerq.net [2]
License: MIT / Apache 2.0 | 作者: Arcenox LLC


核心亮点

特性 说明
零反射 / AOT 就绪 编译期通过 Source Generator 注册任务,无运行时反射,完全可 Trimmable
📅 Cron + 时间调度 支持标准 5/6 位 Cron 表达式、单次/循环任务、精确间隔
💾 双持久化 EF Core(PG / SQL Server / SQLite / MySQL)或 Redis,无需额外存储
📊 实时仪表盘 内置 Vue.js + SignalR Dashboard,可查看/触发/取消任务,无需付费插件
🔄 重试 & 限流 可配置退避重试策略 + 并发执行上限
🌐 多节点分布式 Redis 心跳 + 死节点清理 + 锁协调,横向扩展只需加实例
🔗 任务链 原生支持 parent/child 任务链(Job Chaining)
🧬 DI 优先 与 .NET DI 深度集成,构造函数注入随心所欲

与主流方案对比

TickerQ Quartz.NET Hangfire
AOT 支持 ✅ 原生
任务发现 源生成器(编译时) 反射(运行时) 反射(运行时)
Cron ✅ + Recurring
仪表盘 ✅ 内置 ❌(需第三方) ✅ 内置
持久化 EF Core / Redis ADO.NET SQL Server / Redis
开源 ✅ 完全 ⚠️ 部分 Pro 收费

TickerQ 仪表盘显示任务调度与状态监控


5 分钟快速上手

1️⃣ 安装

dotnet add package TickerQ
dotnet add package TickerQ.EntityFrameworkCore   # EF Core 持久化
# 或
dotnet add package TickerQ.Caching.StackExchangeRedis  # Redis 持久化

2️⃣ 注册服务(Program.cs)

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddTickerQ(options =>
{
    options.UseEfCorePersistence<AppDbContext>();
    // options.WithExecutionTimeout(TimeSpan.FromMinutes(5));
    // options.WithConcurrencyLimit(10);
    // options.WithRetryPolicy(maxRetries: 3, delayBetweenRetries: TimeSpan.FromSeconds(10));
});

var app = builder.Build();
app.UseTickerQ();        // 启用调度器
app.UseTickerQDashboard(); // 启用仪表盘(访问 /tickerq)
app.Run();

3️⃣ 定义任务

using TickerQ.Utilities.Base;

public class MyJobs
{
    [TickerFunction("HelloWorld", Cron = "0 * * * *")] // 每小时执行
    public async Task HelloWorld(TickerFunctionContext context, CancellationToken ct)
    {
        Console.WriteLine($"Hello from TickerQ! Job ID: {context.Id}");
    }

    [TickerFunction("DelayedTask")]
    public async Task DelayedTask(TickerFunctionContext context, CancellationToken ct)
    {
        await Task.Delay(2000, ct);
        Console.WriteLine("2 秒后执行!");
    }
}

4️⃣ 调度任务

public class MyService(ITimeTickerManager<TimeTickerEntity> manager)
{
    public async Task Schedule()
    {
        await manager.AddAsync(new TimeTickerEntity
        {
            Function = "HelloWorld",
            ExecutionTime = DateTime.UtcNow.AddSeconds(10)
        });
    }
}

启动应用后访问 /tickerq 即可打开实时仪表盘 🎯


项目结构

src/
├── TickerQ/                      # 核心(零反射调度引擎)
├── TickerQ.EntityFrameworkCore/  # EF Core 持久化
├── TickerQ.Caching.StackExchangeRedis/  # Redis 持久化
├── TickerQ.Dashboard/            # SignalR + Vue.js 仪表盘
└── samples/                      # 示例项目

⚠️ 自 v2.2.0 起所有包统一版本号,请确保一起更新。


适用场景

场景 推荐度
🏢 企业级定时任务 / Cron 调度 ⭐⭐⭐⭐⭐
📧 邮件发送、报表生成、数据同步 ⭐⭐⭐⭐⭐
🖥️ 需要实时监控的后台服务 ⭐⭐⭐⭐⭐
🌐 多实例分布式任务协调 ⭐⭐⭐⭐
🔬 AOT / Native AOT 部署 ⭐⭐⭐⭐⭐(Quartz/Hangfire 做不到)

总结:如果你在 .NET 8/9 上需要一个高性能、零反射、自带仪表盘的现代任务调度方案,TickerQ 就是目前最优解之一。 🔥

本文由云栈社区整理发布,欢迎更多 .NET 技术交流。




上一篇:开源项目 | 手搓Qt串口调试助手:Serial Master设计与编码全流程
下一篇:金融AI数据管道实战:用MCP协议打通FMP数据库的全流程指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-19 03:55 , Processed in 0.642438 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表