第一章:.
第二章:net 8使用hangfire实现库存同步任务
项目采用微服务的方式开发,分为以下两个服务:
该服务用于定时调用库存同步服务。作为库存同步服务和商品SKU更新服务的管理。
该服务中用到的包:
项目内结构:
该类的主要作用是配置hangfire的监控面板 也就是这里的样式,还配置了用户的账户密码和Hangfire最大开启线程以及是否只读等信息。
using Hangfire;
using Hangfire.Console;
using Hangfire.Dashboard.BasicAuthorization;
using Hangfire.Heartbeat;
using Hangfire.Heartbeat.Server;
using Hangfire.HttpJob;
using Hangfire.Redis.StackExchange;
using Hangfire.Server;
using Hangfire.Tags;
using Hangfire.Tags.Redis.StackExchange;
using HangfireServers.Model;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.Options;
using Spring.Core.TypeConversion;
using StackExchange.Redis;
namespace HangfireServers.Extensions
{
public static class HangfireCollectionExtensions
{
private const string HangfireSettingsKey = "Hangfire:HangfireSettings";
private const string HttpJobOptionsKey = "Hangfire:HttpJobOptions";
private const string HangfireConnectStringKey = "Hangfire:HangfireSettings:ConnectionString";
private const string HangfireLangKey = "Hangfire:HttpJobOptions:Lang";
public static IServiceCollection AddSelfHangfire(this IServiceCollection services, IConfiguration configuration)
{
var hangfireSettings = configuration.GetSection(HangfireSettingsKey);
var httpJobOptions = configuration.GetSection(HttpJobOptionsKey);
services.Configure<HangfireSettings>(hangfireSettings);
services.Configure<HangfireHttpJobOptions>(httpJobOptions);
services.AddTransient<IBackgroundProcess, ProcessMonitor>();
services.AddHangfire(globalConfiguration =>
{
services.ConfigurationHangfire(configuration, globalConfiguration);
});
services.AddHangfireServer((provider, config) =>
{
var settings = provider.GetService<IOptions<HangfireSettings>>()?.Value;
ConfigFromEnv(settings ?? new HangfireSettings());
var queues = settings?.JobQueues.Select(m => m.ToLower()).Distinct().ToList();
var workerCount = Math.Max(Environment.ProcessorCount, settings.WorkerCount); //工作线程数,当前允许的最大线程,默认20
config.ServerName = settings.ServerName;
config.ServerTimeout = TimeSpan.FromMinutes(4);
config.SchedulePollingInterval = TimeSpan.FromSeconds(1);//秒级任务需要配置短点,一般任务可以配置默认时间,默认15秒
config.ShutdownTimeout = TimeSpan.FromMinutes(30); //超时时间
config.Queues = queues?.ToArray(); //队列
config.WorkerCount = workerCount;
});
return services;
}
public static void ConfigurationHangfire(this IServiceCollection services, IConfiguration configuration,
IGlobalConfiguration globalConfiguration)
{
var serverProvider = services.BuildServiceProvider();
var langStr = configuration.GetSection(HangfireLangKey).Get<string>();
var envLangStr = GetEnvConfig<string>("Lang");
if (!string.IsNullOrEmpty(envLangStr)) langStr = envLangStr;
if (!string.IsNullOrEmpty(langStr))
{
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(langStr);
}
var hangfireSettings = serverProvider?.GetService<IOptions<HangfireSettings>>()?.Value;
ConfigFromEnv(hangfireSettings??new HangfireSettings());
var httpJobOptions = serverProvider?.GetService<IOptions<HangfireHttpJobOptions>>()?.Value;
ConfigFromEnv(httpJobOptions??new HangfireHttpJobOptions());
因篇幅问题不能全部显示,请点此查看更多更全内容
怀疑对方AI换脸可以让对方摁鼻子 真人摁下去鼻子会变形
女子野生动物园下车狼悄悄靠近 后车司机按喇叭提醒
睡前玩8分钟手机身体兴奋1小时 还可能让你“变丑”
惊蛰为啥吃梨?倒春寒来不来就看惊蛰
男子高速犯困开智能驾驶出事故 60万刚买的奔驰严重损毁