zoukankan      html  css  js  c++  java
  • hangfire使用笔记

    1、导入nuget包

    2、配置

    简单配置后就可以写自己的Job了

    注意:Hangfire.RecurringJobExtensions这个扩展支持两种job添加方法:json配置文件和特性。但由于时区使用的是string配置,导致Linux上时区不对,所以扩展一下job的加载方法:

    如果不希望在一个job还没执行完成的时候再次进入该job,添加如下过滤器:
    /// <summary>
        /// 每个job都不可重入过滤器
        /// </summary>
        public class NotReentryServerHangfireFilter : IServerFilter
        {
            /// <summary>
            /// 判断job是否正在运行
            /// </summary>
            static ConcurrentDictionary<string, DateTime> JobRunnings = new ConcurrentDictionary<string, DateTime>();
    
            ILogger _logger;
            public NotReentryServerHangfireFilter(ILogger<NotReentryServerHangfireFilter> logger)
            {
                _logger = logger;
            }
    
            public void OnPerforming(PerformingContext filterContext)
            {
                var jobId = BuildJobId(filterContext.BackgroundJob);
                if(!JobRunnings.TryAdd(jobId, DateTime.Now))
                {
                    filterContext.Canceled = true;
                    return;
                }
                _logger.LogInformation($"{jobId} starting...");
            }
    
            public void OnPerformed(PerformedContext filterContext)
            {
                var jobId = BuildJobId(filterContext.BackgroundJob);
                JobRunnings.TryRemove(jobId, out var tmp);
                _logger.LogInformation($"{jobId} finished.");
            }
    
            public string BuildJobId(BackgroundJob job)
            {
                return $"{job.Job.Type.FullName}.{job.Job.Method.Name}";
            }
        }
    
     dashboard的授权取决于你的自己的身份认证机制了: 
    异常:
    日志:
    日志:
    public class HangfireLoggerProvider : ILogProvider
        {
            ILoggerFactory _loggerFactory;
            public HangfireLoggerProvider(ILoggerFactory loggerFactory)
            {
                _loggerFactory = loggerFactory;
            }
    
            public ILog GetLogger(string name)
            {
                return new HangfireLogger(_loggerFactory.CreateLogger(name));
            }
        }
    
        public class HangfireLogger : ILog
        {
            ILogger _logger;
    
            public HangfireLogger(ILogger logger)
            {
                _logger = logger;
            }
    
            public bool Log(Hangfire.Logging.LogLevel logLevel, Func<string> messageFunc, Exception exception = null)
            {
                var msg = messageFunc?.Invoke();
                if (string.IsNullOrWhiteSpace(msg) && exception == null)
                    return false;
    
                switch (logLevel)
                {
                    case Hangfire.Logging.LogLevel.Trace:
                        _logger.LogTrace(0, exception, msg);
                        break;
                    case Hangfire.Logging.LogLevel.Debug:
                        _logger.LogDebug(0, exception, msg);
                        break;
                    case Hangfire.Logging.LogLevel.Info:
                        _logger.LogInformation(0, exception, msg);
                        break;
                    case Hangfire.Logging.LogLevel.Warn:
                        _logger.LogWarning(0, exception, msg);
                        break;
                    case Hangfire.Logging.LogLevel.Error:
                        _logger.LogError(0, exception, msg);
                        break;
                    case Hangfire.Logging.LogLevel.Fatal:
                        _logger.LogCritical(0, exception, msg);
                        break;
                    default:
                        break;
                }
    
                return true;
            }
        }
    

      

      

  • 相关阅读:
    一个创业成功者原始资本的快速积累
    个性创业先要聚人气才能赚大钱
    26个字母——女性必读
    100个成功创业经验方法谈
    从老板身上偷学的东西,你能吗?
    18岁29岁创业者的“黄金线” 要把握
    数禾云上数据湖最佳实践
    如何做好技术 Team Leader?
    闲鱼是怎么让二手属性抽取准确率达到95%+的?
    解读:云原生下的可观察性发展方向
  • 原文地址:https://www.cnblogs.com/pangjianxin/p/8328169.html
Copyright © 2011-2022 走看看