.netcore简单使用hangfire

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管理页面如下图:

 

posted on 2020-05-08 00:12  john_yong  阅读(2210)  评论(0编辑  收藏  举报

导航