網站首頁 編程語言 正文
簡要說明
后臺作業在系統開發的過程當中,是比較常用的功能。因為總是有一些長耗時的任務,而這些任務我們不是立即響應的,例如 Excel 文檔導入、批量發送短信通知等。
ABP vNext 提供了后臺作業的支持,并且還提供了對 HangFire 和 RabbitMQ 的后臺作業集成。開發人員在使用這些第三方庫的時候,基本就是開箱即用,不需要做其他復雜的配置。
ABP vNext 的實現就是在 CLR 的?Timer?之上封裝了一層,周期性地執行用戶邏輯。
ABP vNext 默認提供的?后臺任務管理器,就是在后臺作業基礎之上進行的封裝。
涉及到后臺任務的模塊一共有 6 個,它們分別是:
- Volo.Abp.Threading :提供了一些常用的線程組件,其中?AbpTimer?就是在里面實現的。
- Volo.Abp.BackgroundWorkers :后臺任務的定義和實現。
- Volo.Abp.BackgroundJobs.Abstractions :后臺任務的一些共有定義。
- Volo.Abp.BackgroundJobs :默認的后臺任務管理器實現。
- Volo.Abp.BackgroundJobs.HangFire :基于 Hangfire 庫實現的后臺任務管理器。
- Volo.Abp.BackgroundJobs.RabbitMQ :基于 RabbitMQ 實現的后臺任務管理器。
什么是Hangfire
Hangfire?是一個開源的.NET任務調度框架,目前1.6+版本已支持.NET?Core。個人認為它最大特點在于內置提供集成化的控制臺,方便后臺查看及監控。
引用
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="1.0.2" /> <PackageReference Include="Volo.Abp.Autofac" Version="1.0.2" /> <PackageReference Include="Hangfire" Version="1.7.7" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.7.7" /> <PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" /> <PackageReference Include="Hangfire.Redis.StackExchange.StrongName" Version="1.7.0" />
啟動
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication();
var Configuration = services.GetConfiguration();
GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"])));
services.AddHostedService();
services.AddHangfire(x =>
{
var connectionString = Configuration["Hangfire:Redis:ConnectionString"];
x.UseRedisStorage(connectionString, new RedisStorageOptions()
{
//活動服務器超時時間
InvisibilityTimeout = TimeSpan.FromMinutes(60),
Db = int.Parse(Configuration["Hangfire:Redis:Db"])
});
x.UseDashboardMetric(DashboardMetrics.ServerCount)
.UseDashboardMetric(DashboardMetrics.RecurringJobCount)
.UseDashboardMetric(DashboardMetrics.RetriesCount)
.UseDashboardMetric(DashboardMetrics.AwaitingCount)
.UseDashboardMetric(DashboardMetrics.EnqueuedAndQueueCount)
.UseDashboardMetric(DashboardMetrics.ScheduledCount)
.UseDashboardMetric(DashboardMetrics.ProcessingCount)
.UseDashboardMetric(DashboardMetrics.SucceededCount)
.UseDashboardMetric(DashboardMetrics.FailedCount)
.UseDashboardMetric(DashboardMetrics.EnqueuedCountOrNull)
.UseDashboardMetric(DashboardMetrics.FailedCountOrNull)
.UseDashboardMetric(DashboardMetrics.DeletedCount);
});
}
public void Configure(IApplicationBuilder app, IConfiguration Configuration)
{
app.InitializeApplication();
app.UseAuthorization();
var filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
{
SslRedirect = false,
RequireSsl = false,
LoginCaseSensitive = false,
Users = new[]
{
new BasicAuthAuthorizationUser
{
Login = Configuration["Hangfire:Login"] ,
PasswordClear= Configuration["Hangfire:PasswordClear"]
}
}
});
app.UseHangfireDashboard("", new DashboardOptions
{
Authorization = new[]
{
filter
},
});
var jobOptions = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "test", "default" },
WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]),
ServerName = Configuration["Hangfire:ServerName"],
SchedulePollingInterval = TimeSpan.FromSeconds(1), //計劃輪詢間隔 支持任務到秒
};
app.UseHangfireServer(jobOptions);
}
}
設置
///
/// 已完成的job設置過期,防止數據無限增長
///
public class SucceededStateExpireHandler : IStateHandler
{
public TimeSpan JobExpirationTimeout;
public SucceededStateExpireHandler(int jobExpirationTimeout)
{
JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);
}
public string StateName => SucceededState.StateName;
public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
context.JobExpirationTimeout = JobExpirationTimeout;
}
public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
}
}
原文鏈接:https://www.cnblogs.com/jackyfei/p/16205512.html
相關推薦
- 2023-07-28 form表單使用Select 選擇器
- 2022-09-09 詳解C語言中動態內存管理及柔性數組的使用_C 語言
- 2022-08-07 QT利用QProcess獲取計算機硬件信息_C 語言
- 2022-04-14 淺談Go切片的值修改是否會覆蓋數組的值?_Golang
- 2022-03-28 用python實現九九乘法表實例_python
- 2022-05-06 python?selenium中Excel數據維護指南_python
- 2022-04-30 C#繪制實時曲線圖的方法詳解_C#教程
- 2022-05-11 Excel表中數據轉為sql
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支