首页 > 其他分享 >(十).NET6.0 搭建基于Quartz组件的定时调度任务

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

时间:2024-12-27 11:42:54浏览次数:3  
标签:Autofac Quartz builder NET6.0 Services 注册 组件 new app



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运行结果(每一秒执行一次的示例)

标签:Autofac,Quartz,builder,NET6.0,Services,注册,组件,new,app
From: https://www.cnblogs.com/sq1201/p/18635285

相关文章

  • (七).NET6.0部署RabbitMQ
    1.下载erlang语言包OTP。官网地址:https://www.erlang.org/downloads2.Rabbitmq官网下载地址:https://www.rabbitmq.com/download.html需要先安装Erlang语言包,然后再安装RabbitMQ,安装RabbitMQ的服务器名称(电脑名称),以及用户名称,不要带中文,有可能会导致服务无法识别服务器,导致一......
  • (八).NET6.0添加通用的Redis功能
    1.添加包:StackExchange.Redis2.在配置文件里面,新建Redis的有关配置信息Name是别名,可以任意起。Ip是Redis的服务端地址,例如安装本地,就是127.0.0.1,端口号Port默认是6379,密码可以通过Redis安装的根目录下的配置文件进行设置,Timeout是连接的超时时间,Db是使用Redis的DB区,一般Redis......
  • (六).NET6.0通用读取配置文件功能
    1.新增Microsoft.Extensions.Configuration包在启动项目下,设置appsettings.json属性为始终复制2.新建一个文件夹Common,用于存放工具类项目。并且新建项目:Ysq.Core.AppSettings,引用package包项目,然后新建一个读取配置文件的通用类,叫AppHelper。目录结构如图3.AppHelper代码如......
  • (五).NET6.0使用Serilog进行配置和实现日志记录
    1.首先安装Serilog六件套神装包也可以对个别相应的包进行删除等,例如:1是读取配置文件的,如果不需要通过配置文件进行操作,就可以不使用这个包。2是打印到控制台的,如果不需要打印到控制台,也可以不引用。3是写入到文件的,如果不需要写入到文件,也是可以不提供的。我在此处全部引入,方便......
  • AI视频领域组件评价 — 4星能力
    最近AI生成视频的能力真是每天都越来越多,心里感觉始终追不上高速发展的AIGC势头。本文尝试分享尽可能详细的内容,每个都是笔者亲自分析的,如有任何错误之处,请随时联系作者。本文中的截图或者说配图都是用微信小程序【字形绘梦】制作,谢谢该软件的免费支持。备注:本文不负责提......
  • HarmonyOS NEXT开发实战:打造高效上拉刷新与下拉加载组件(一)空页面的设计与实现
    本文正在参加华为鸿蒙有奖征文征文活动前言:在鸿蒙开发的世界中,用户体验至关重要。我在网络上搜寻了一番,发现现有的上拉刷新和下拉加载组件要么功能不全,要么不够优雅。因此,我决定自己动手,打造一套既美观又实用的组件。本系列文章将深入解析如何使用鸿蒙系统组件封装出优秀的上拉......
  • HarmonyOS NEXT开发实战:实现高效下拉刷新与上拉加载组件(二)刷新核心逻辑与空页面集成
    前言:在上一篇文章中,我们深入探讨了如何在HarmonyOS中实现一个功能完备的空页面组件。现在,我们将进入下拉刷新和上拉加载功能的核心逻辑实现。这不仅仅是技术实现,更是对用户体验的深刻理解。本文将详细介绍如何将空页面与下拉刷新、上拉加载逻辑相结合,打造一个既高效又用户友好的......
  • 关于Harmony OS中Scroll组件的使用方法
    #创作灵感#在使用HarmonyOS进行开发时,常常会用到Scroll组件,这里对之前自己开发时使用Scroll组件的一些心得和建议进行一些汇总一、基础使用方法首先,对Scroll的一些基础使用进行举出Scroll可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。说明:该组......
  • vue父组件接收子组件方法传递多个参数时追加参数
    VUE3子组件<template> <viewclass=""> <viewclass=""@click="handleClick">1</view> <viewclass=""@click="handleClick2">2</view> </view></template><......
  • 使用H5做一个可以多选的select组件
    HTML5原生<select>元素支持多选,你只需要在<select>标签中添加multiple属性即可。下面是一个简单的例子:<!DOCTYPEhtml><html><head><title>多选Select组件</title></head><body><form><labelfor="mySelec......