返回顶部
首页 > 资讯 > 数据库 >.net core 基于Hangfire+Mysql持久化实现定时任务配置方法
  • 555
分享到

.net core 基于Hangfire+Mysql持久化实现定时任务配置方法

2024-04-02 19:04:59 555人浏览 薄情痞子
摘要

1.negut引入hangfire相关包 Hangfire.Aspnetcore,Hangfire.Core,Hangfire.Dashboard.BasicAuthorizatio

1.negut引入hangfire相关包

Hangfire.Aspnetcore,Hangfire.Core,Hangfire.Dashboard.BasicAuthorization,Hangfire.MysqlStorage

2.Appsetting 配置hangfire资源


"HangFire": {
    "Connection": "Server=127.0.0.1;uid=root;pwd=wakamysql666;database=Hangfire_DB;AllowLoadLocalInfile=true;Allow User Variables=True;",
    "pathMatch": "/hangfire",
    "Login": "login",
    "PassWordClear": "pwd"
  },

3.自定义扩展类


/// <summary>
    ///     任务调度
    /// </summary>
    public static class HangfireSetup
    {
        public static void AddHangfireSetup(this IServiceCollection services)
        {
            if (services == null) throw new ArgumentNullException(nameof(services));
            if (services == null) throw new ArgumentNullException(nameof(services));
            services.AddHangfire(configuration => configuration
                .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)//此方法 只初次创建数据库使用即可
                .UseSimpleAssemblyNameTypeSerializer()
                .UseRecommendedSerializerSettings()
                .UseStorage(new MysqlStorage(Appsettings.app("HangFire", "Connection"), new MySqlStorageOptions
                {
                    TransactionIsolationLevel =
                        (IsolationLevel?) System.Data.IsolationLevel.ReadCommitted, //事务隔离级别。默认是读取已提交
                    QueuePollInterval = TimeSpan.FromSeconds(15), //- 作业队列轮询间隔。默认值为15秒。
                    JobExpirationCheckInterval = TimeSpan.FromHours(1),
                    CountersAggregateInterval = TimeSpan.FromMinutes(5),
                    PrepareSchemaifNecessary = false, // 如果设置为true,则创建数据库表。默认是true
                    DashboardJobListLimit = 50000,
                    TransactionTimeout = TimeSpan.FromMinutes(1),
                    TablesPrefix = "Hangfire"
                })));
            services.AddHangfireServer();
        }
    }

4.在startupConfigureServices注入扩展


   services.AddHangfireSetup();//任务调度

5.配置MIddleware


//任务调度中间件
    public static class HangfireMiddleware
    {
        public static void UseHangfireMiddleware(this IApplicationBuilder app)
        {
            if (app == null) throw new ArgumentNullException(nameof(app));
            app.UseHangfireServer(); //配置服务//ConfigureOptions()
            app.UseHangfireDashboard(Appsettings.app("HangFire", "pathMatch"), HfAuthor()); //配置面板
            //BackgroundJob.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));            
            HangfireService(); //配置各个任务
        }

        /// <summary>
        ///     配置账号模板信息
        /// </summary>
        /// <returns></returns>
        public static DashboardOptions HfAuthor()
        {
            var filter = new BasicAuthAuthorizationFilter(
                new BasicAuthAuthorizationFilterOptions
                {
                    SslRedirect = false,
                    RequireSsl = false,
                    LoginCaseSensitive = false,
                    Users = new[]
                    {
                        new BasicAuthAuthorizationUser
                        {
                            Login = Appsettings.app("HangFire", "Login"), //可视化的登陆账号
                            PasswordClear = Appsettings.app("HangFire", "PasswordClear") //可视化的密码
                        }
                    }
                });
            return new DashboardOptions
            {
                Authorization = new[] {filter}
            };
        }

        /// <summary>
        ///     配置启动
        /// </summary>
        /// <returns></returns>
        public static BackgroundJobServerOptions ConfigureOptions()
        {
            return new()
            {
                Queues = new[] {"Job", nameof(HangfireConfigureQueue.picturetooss)}, //队列名称,只能为小写
                WorkerCount = Environment.ProcessorCount * 5, //并发任务
                ServerName = "HangfireServer" //代表服务名称
            };
        }

        #region 配置服务

        public static void HangfireService()
        {
            // "0 0 1 * * ? " 每天凌晨一点执行阿里云OSS
            RecurringJob.AddOrUpdate<IOrderItemInfoService>(_ => _.JobOSS(), "0 0 1 * * ? ", TimeZoneInfo.Local,
                nameof(HangfireConfigureQueue.picturetooss));

            // "0 0 1 * * ? " 每天早上七点执行定时任务更新汇率
            RecurringJob.AddOrUpdate<ICurrencyInfosService>(_ => _.UpdateRateByJob(), "0 0 7 * * ? ",
                TimeZoneInfo.Local, nameof(HangfireConfigureQueue.picturetooss));
        }

        #endregion
    }

6.startupConfigure配置使用中间件


 app.UseHangfireMiddleware();//Job

效果图:

结语:到此hangfire实现定时任务的配置已经全部完成。

到此这篇关于.net core 基于Hangfire+Mysql持久化实现定时任务的文章就介绍到这了,更多相关.Net Core Hangfire定时任务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: .net core 基于Hangfire+Mysql持久化实现定时任务配置方法

本文链接: https://lsjlt.com/news/130775.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作