上一篇已讲到:Hangfire之Mssql版本,今天说说下篇Mysql版
首先需要引用包:
先在appsettings.json配置文件中加入节点:
"HangFire": {
"DbConnection": "server=127.0.0.1;port=3306;database=hangfire;user=root;password=123;AllowUserVariables=True;",
"LoginPath": "/services/index", //服务平台地址
"User": "admin", //用户名
"Pwd": "123456" //密码
},
在Program.cs文件中注入服务:
//注入Hangfire服务
builder.Services.AddHangfireSetup();
//防止中文乱码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
//注入Job
app.UseHangfireMiddleware();
注入时实现需实现中间类:AddHangfireSetup 和 UseHangfireMiddleware
/// <summary>
/// 注入hangfire,并配置是否初始化数据库
/// </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));
string dbConnection = AppSettings.GetSection("HangFire:DbConnection");
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)//此方法 只初次创建数据库使用即可
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseStorage(new MySqlStorage(dbConnection, 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();
}
}
/// <summary>
/// 配置面板以及注入job
/// </summary>
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.GetSection("HangFire:LoginPath"), Authorization());
//初始化Interval
IntervalService.Create(app.ApplicationServices);
}
/// <summary>
/// 配置账号模板信息
/// </summary>
/// <returns></returns>
public static DashboardOptions Authorization()
{
var filter = new BasicAuthAuthorizationFilter(
new BasicAuthAuthorizationFilterOptions
{
SslRedirect = false,
RequireSsl = false,
LoginCaseSensitive = false,
Users = new[]
{
new BasicAuthAuthorizationUser
{
Login = AppSettings.GetSection("HangFire:User"),
PasswordClear = AppSettings.GetSection("HangFire:Pwd")
}
}
});
return new DashboardOptions
{
Authorization = new[] { filter }
};
}
/// <summary>
/// 配置
/// </summary>
/// <returns></returns>
public static BackgroundJobServerOptions ConfigureOptions()
{
return new()
{
WorkerCount = Environment.ProcessorCount * 5, //并发任务
ServerName = "定时调度服务" //代表服务名称
};
}
}
其中的:
AppSettings 是读取配置文件的公共基类
IntervalService 是初始化主线程基类,之前mssql篇也介绍过
public class IntervalService
{
/// <summary>
/// 初始化任务创建
/// </summary>
/// <param name="provider"></param>
public static void Create(IServiceProvider provider)
{
IntervalService service = (IntervalService)FormatterServices.GetUninitializedObject(typeof(IntervalService));
service.Start();
}
/// <summary>
/// 主线程服务
/// </summary>
public void Start()
{
#region 每天凌晨五点执行
RecurringJob.AddOrUpdate("xxx服务", () => 实现方法, "0 0 5 * * ?", TimeZoneInfo.Local);
#endregion
}
}
时间配置规则为corn表达式,在Hangfire之Mssql版本此文中已经介绍,需要的小伙伴自行查看。
AppSettings类的实现
/// <summary>
/// appsettings.json配置节点
/// </summary>
public class AppSettings
{
public static IConfiguration configuration { get; set; }
static AppSettings()
{
configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
.Build();
}
/// <summary>
/// 获取配置文件中的节点值
/// </summary>
/// <param name="sectionAndkeyName">如:AppSetting:xxx:xxx</param>
/// <returns></returns>
public static string GetSection(string sectionAndkeyName)
{
return configuration[#34;{sectionAndkeyName}"];
}
}
至此调度服务就搭好了,可以运行看看效果,进入路径为:/services/hangfire,请注意避坑时区问题。
本文暂时没有评论,来添加一个吧(●'◡'●)