.netcore简单使用hangfire
阅读原文时间:2022年05月06日阅读:1

Hangfire简介

Hangfire是一个开源的任务调度框架,它内置集成了控制页面,很方便我们查看,控制作业的运行;对于运行失败的作业自动重试运行。它支持永久性存储,支持存储于mssql,mysql,mongodb,redis等
想了解更多关于Hangfire,请移步hangfire官网https://www.hangfire.io/

简单使用Hangfire

第一步:创建WebApi项目承载任务调度

引入Hangfire和Hangfire.MySql.Core(因为我使用的mysql作为定时任务数据持久化的数据库,所以需要Hangfire.MySql.Core)

修改appsettings.json配置文件,添加持久化作业数据的数据库连接

"ConnectionStrings": {
"DiseaseJobConnection": "Server=localhost;port=3306;Database=diseasejob;User Id=root;password=root23456;Allow User Variables=True"
},

第二步、创建作业业务类

/// <summary>  
///  疫情业务类  
/// </summary>  
public class DiseaseService : IDiseaseService  
{  
    private IHttpClientFactory \_httpClientFactory = null;  
   // private DiseaseDataContext \_diseaseDataContext = null;  
    /// <summary>  
    ///  
    /// </summary>  
    /// <param name="httpClientFactory"></param>  
    /// <param name="diseaseDataContext"></param>  
    public DiseaseService(IHttpClientFactory httpClientFactory) //, DiseaseDataContext diseaseDataContext)  
    {  
        this.\_httpClientFactory = httpClientFactory;  
        //\_diseaseDataContext = diseaseDataContext;  
    }  
    /// <summary>  
    /// 同步疫情  
    /// </summary>  
    /// <returns></returns>  
    public async Task<string> SyncDiseaseData()  
    {  

       //TODO同步疫情数据
       return "";

    }

第三步、在startup.cs中注入Hangfire

ConfigureServices方法中添加

        services.AddHttpClient();  //注入HttpClient  
        #region hangfire  
        var storage = new MySqlStorage(Configuration.GetConnectionString("DiseaseJobConnection")  
              , new MySqlStorageOptions { PrepareSchemaIfNecessary = true, TablePrefix = "Disease" });  
        //GlobalConfiguration.Configuration.UseStorage(new MySqlStorage(storage, new MySqlStorageOptions  
        //{  
        //    TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事务隔离级别。默认值为读提交。  
        //    QueuePollInterval = TimeSpan.FromSeconds(15),             // 作业队列轮询间隔。默认值为15秒  
        //    JobExpirationCheckInterval = TimeSpan.FromHours(1),       // 作业过期检查间隔(管理过期记录)。默认为1小时  
        //    CountersAggregateInterval = TimeSpan.FromMinutes(5),      // 间隔到聚合计数器。默认为5分钟  
        //    PrepareSchemaIfNecessary = true,                          // 如果设置为true,则创建数据库表。默认值为true  
        //    DashboardJobListLimit = 50000,                            // 仪表板作业列表上限。默认值为50000  
        //    TransactionTimeout = TimeSpan.FromMinutes(1),             // 事务超时。默认为1分钟  
        //}));  
        services.AddHangfire(p => p.UseStorage(storage));  
        #endregion  
        services.AddScoped<DiseaseService>(); //注入业务

在Configure方法中

       //hangfire  
        app.UseHangfireServer();  
        app.UseHangfireDashboard();  
        //作业  
        RecurringJob.AddOrUpdate<DiseaseService>("SyncDiseaseInformation", p => p.SyncDiseaseData(), "0 9,12,18,0 \* \* ?");

-------------------------------

运行程序后切换到hangfire管理页面如下图:

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器