• .net framework MVC 下 Hangfire使用,时区,权限


    安装

    NuGet 上有几个可用的Hangfire 的软件包。如果在ASP.NET应用程序中安装HangFire,并使用Sql Server作为存储器,那么请在Package Manager Console窗口中键入以下命令:

    PM> Install-Package Hangfire

    配置

    在安装package后,添加或者更新以下几行到Owin Startp类:

    复制代码
    using Hangfire;
    
    // ...
    
    public void Configuration(IAppBuilder app)
    {
        GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");
    
        app.UseHangfireDashboard();
        app.UseHangfireServer();
    }
    复制代码

    需要配置授权

    默认情况下,只有本地有权限访问Hangfire仪表板。如果需要授权远程访问,那么仪表板的授权必须进行相应的配置。

    然后打开Hangfire仪表板来测试您的配置。编译项目并在浏览器中打开以下URL:

    1
    http://<your-site>/hangfire

    用法

    添加工作

    HangFire处理不同类型的后台任务,并且使用一个独立的上下文环境调用他们。

    Fire-And-forget(发布/订阅)

    这是一个主要的后台任务类型,持久化消息队列会去处理这个任务。当你创建了一个发布/订阅任务,该任务会被保存到默认队列里面(默认队列是"Default",但是支持使用多队列)。多个专注的工作者(Worker)会监听这个队列,并且从中获取任务并且完成任务。

    BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));

    延迟

    如果想要延迟某些任务的执行,可以是用以下任务。在给定延迟时间后,任务会被排入队列,并且和发布/订阅任务一样执行。

    BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1));

    循环

    按照周期性(小时,天等)来调用方法,请使用RecurringJob类。在复杂的场景,您可以使用CRON表达式指定计划时间来处理任务。

    RecurringJob.AddOrUpdate(() => Console.WriteLine("Daily Job"), Cron.Daily);

    连续

    连续性允许您通过将多个后台任务链接在一起来定义复杂的工作流。

    var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, "));
    BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));

    释放

    Hangfire将您的任务保存到持久化库汇总,并且以可靠的方式处理它们。这意味着,你可以中断Hangfire Worder的线程,重新加载应用程序域,或者终止程序,即使这样您的任务仍会被处理。只有在你代码的最后一行执行完成,Hangfire才会标记这个任务完成。并且知道任务可能在最后一行代码执行之前失败。它包含多种 自动-重试机制,它可以自动处理在存储或代码执行过程中发生的错误。

    这对于通用托管环境(如IIS Server)非常重要。它们可以包含不同的优化,超时和错误处理代码(可能导致进程终止)来防止不好的事情发生。如果您没有使用可靠的处理和自动机制,您的工作可能会丢失。您的最终用户可能无限期等待某些任务,如电子邮件,报告,通知等。

    但是当您的存储空间破损时,Hangfire无法做任何事情。请为您的存储使用不同的故障切换策略,以保证在发生灾难时处理每个作业。

    以上文章来源:https://www.cnblogs.com/tangxing/p/6669051.html 

    原文地址:http://docs.hangfire.io/en/latest/quick-start.html

    拓展内容

    时区配置问题:

    RecurringJob.AddOrUpdate(() => WriteLog("xcxxx"), Cron.Daily(14,00), TimeZoneInfo.Local); //注意最小单位是分钟,
    //TimeZoneInfo.Local 使用服务器本地时间
    
    

    权限配置问题:

    OwinStartup 下 Configuration文件

    GlobalConfiguration.Configuration.UseSqlServerStorage("HangfireDBConnection");
                app.UseHangfireServer();
    //app.UseHangfireDashboard(); //无权限控制 var options = new DashboardOptions { Authorization = new[] { new HangfireAuthorizationFilter() } }; app.UseHangfireDashboard("/hangfire", options); //采用权限控制
        public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
        {
            //这里需要配置权限规则
            public bool Authorize(DashboardContext context)
            {
                return new UserService().IsAdmin(); //True 可以访问,False拒绝访问,结合系统原有逻辑设置
            }
        }
  • 相关阅读:
    索引的优缺点
    php中创建和调用WebService
    Redis常用数据结构和操作
    PHP的array_merge
    数据库最左前缀原则
    Mysql+Sphinx实现全文搜索
    YAPI安装和使用
    根据导入xlxs的文件,来写入数据库
    操作RDS文档说明
    springboot查找配置文件路径的过程
  • 原文地址:https://www.cnblogs.com/kim-meng/p/10893940.html
Copyright © 2020-2023  润新知