(十).NET6.0 搭建基于Quartz组件的定时调度任务



1.添加Quartz定时器组件

2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目。然后新建一个中间调度类,叫QuartzMiddleJob

3.新建一个Job工厂类,叫YsqJobFactory,用来获取刚刚创建的中间调度类的服务

4.新建一个通用执行计划类,叫YsqJobSchedule,用于每次任务都通过该计划进行生成

5.现在添加一个任务,新建任务类 MyJobs,并且继承自IJob,然后在Excute方法里面,就是该任务执行调度时候会进去执行的了

6.将任务注册到Autofac中

7.编写Program类

点击查看代码
var builder = WebApplication.CreateBuilder(args);

#region 向容器中添加服务
// **1. 初始化日志配置(优先执行)**
// 日志需要尽早配置,确保后续的服务、管道启动时能记录日志
AppHelper.Init(builder.Configuration);
builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration.ReadFrom.Configuration(context.Configuration);
});

// **2. 注册原生服务(AddXxx 服务)**
// 原生服务注册优先,便于 Autofac 接管时完整保留这些服务
builder.Services.AddControllers(); // 添加控制器支持
builder.Services.AddEndpointsApiExplorer(); // 添加终结点支持
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "API 文档标题",
        Version = "1.0",
        Description = "这是 API 文档描述"
    });
    var xmlFile = Path.Combine(AppContext.BaseDirectory, "Ysq.Core.xml");
    c.IncludeXmlComments(xmlFile, true);
});

// **3. 配置 Hangfire 服务**
// 必须在 Autofac 配置之前注册,因为其服务会被转移到 Autofac 中
HangfireConfigInfo.ConnectionString = AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "ConnectionString" });
HangfireConfigInfo.Db = Convert.ToInt32(AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "Db" }));
builder.Services.AddHangfire(config =>
{
    config.UseStorage(new RedisStorage(
        HangfireConfigInfo.ConnectionString,
        new RedisStorageOptions
        {
            Db = HangfireConfigInfo.Db,
            FetchTimeout = TimeSpan.FromMilliseconds(30)
        }));
});
builder.Services.AddHangfireServer(); // 注册 Hangfire 后台任务

// **4. 替换 DI 容器为 Autofac**
// 在所有原生服务注册之后执行,便于 Autofac 接管完整的服务注册
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
    containerBuilder.RegisterModule(new AutofacRegister()); // 在 Autofac 中注册自定义服务
});

// **5. 注册 Hosted Service(Quartz.NET 或其他后台服务)**
// 注册 Quartz.NET 的 HostedService,此时依赖已全部就绪
builder.Services.AddHostedService<YsqJobHostService>();
#endregion

// **6. 构建应用**
var app = builder.Build();

#region 配置HTTP请求管道

// **7. 配置中间件管道**
// 按照 ASP.NET Core 的推荐顺序配置中间件
app.UseSerilogRequestLogging(options =>
{
    options.MessageTemplate = "HTTP {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000}ms";
});

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    IgnoreAntiforgeryToken = true,
    DashboardTitle = "Hangfire 任务监控面板",
    AsyncAuthorization = new[] { new MyHangfireFilter() },
    IsReadOnlyFunc = _ => true // 设置面板为只读
});

// 启用 Swagger 文档
app.UseSwagger(); 
app.UseSwaggerUI();

// **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
if (!app.Environment.IsDevelopment())
{
    builder.WebHost.UseUrls("http://*:35678");//指定监听端口号
}

// 启用授权中间件
app.UseAuthorization(); 

// **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
app.MapControllers();

// **9. 配置 Hangfire 的定时任务**
// 必须在应用完全构建并运行时添加定时任务
RecurringJob.AddOrUpdate<IHangfireJobs>("MyFirstJob", x => x.FirstJob(), "0 10 * * *");

app.Run();
#endregion

8.查看demo运行结果(每一秒执行一次的示例)

posted @   sq1201  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示