Browse Source

⬆️ 升级Abp5.1.3

 Hangfire添加自动删除过期任务
 Hangfire修改自动重试次数和重试时间间隔
 Hangfire添加重试最后一次处理逻辑
main-auditlogging 5.1.1.5
王军 4 years ago
parent
commit
99c6a0e13e
  1. 3
      aspnet-core/Directory.Build.props
  2. 21
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/AbpProHttpApiHostModule.cs
  3. 26
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs
  4. 0
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/CronType.cs
  5. 0
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs
  6. 28
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs
  7. 33
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/RecurringJobsExtensions.cs
  8. 17
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Jobs/RecurringJobsExtensions.cs
  9. 1
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Lion.AbpPro.HttpApi.Host.csproj
  10. 2
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.json

3
aspnet-core/Directory.Build.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<AbpPackageVersion>5.1.1</AbpPackageVersion>
<AbpPackageVersion>5.1.3</AbpPackageVersion>
<DotNetCoreCAPVersion>6.0.0</DotNetCoreCAPVersion>
<MicrosoftVersion>6.0.0</MicrosoftVersion>
<SystemComponentModelAnnotationsVersion>6.0.0-preview.4.21253.7</SystemComponentModelAnnotationsVersion>
@ -19,7 +19,6 @@
<SerilogAspNetCoreVersion>4.1.0</SerilogAspNetCoreVersion>
<SerilogExceptionsVersion>7.0.0</SerilogExceptionsVersion>
<SerilogSettingsConfigurationVersion>3.3.0</SerilogSettingsConfigurationVersion>
<SerilogSinksRollingFileVersion>3.3.0</SerilogSinksRollingFileVersion>
<SerilogSinksElasticsearchVersion>8.4.1</SerilogSinksElasticsearchVersion>
<NewtonsoftJsonVersion>13.0.1</NewtonsoftJsonVersion>
<NESTVersion>7.15.1</NESTVersion>

21
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/AbpProHttpApiHostModule.cs

@ -24,6 +24,8 @@ using System.Text;
using System.Threading.Tasks;
using Lion.AbpPro.CAP;
using Lion.AbpPro.Extensions.Filters;
using Lion.AbpPro.Extensions.Hangfire;
using Lion.AbpPro.Jobs;
using Lion.AbpPro.Shared.Hosting.Microservices;
using Lion.AbpPro.Shared.Hosting.Microservices.Microsoft.AspNetCore.Builder;
using Lion.AbpPro.Shared.Hosting.Microservices.Swaggers;
@ -64,7 +66,7 @@ namespace Lion.AbpPro
public override void OnPostApplicationInitialization(
ApplicationInitializationContext context)
{
// context.CreateRecurringJob();
context.CreateRecurringJob();
base.OnPostApplicationInitialization(context);
}
@ -109,7 +111,7 @@ namespace Lion.AbpPro
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseUnitOfWork();
app.UseConfiguredEndpoints(endpoints => { endpoints.MapHealthChecks("/health"); });
app.UseHangfireDashboard("/hangfire", new DashboardOptions()
@ -127,10 +129,7 @@ namespace Lion.AbpPro
private void ConfigureHangfireMysql(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobOptions>(options =>
{
options.IsJobExecutionEnabled = true;
});
Configure<AbpBackgroundJobOptions>(options => { options.IsJobExecutionEnabled = true; });
context.Services.AddHangfire(config =>
{
config.UseStorage(new MySqlStorage(
@ -142,7 +141,13 @@ namespace Lion.AbpPro
//QueuePollInterval = TimeSpan.Zero,
//UseRecommendedIsolationLevel = true,
//DisableGlobalLocks = true
JobExpirationCheckInterval = TimeSpan.FromSeconds(3)
}));
var delaysInSeconds = new int[] { 10, 60, 60 * 3 }; // 重试时间间隔
var Attempts = 3; // 重试次数
config.UseFilter(new AutomaticRetryAttribute() { Attempts = Attempts, DelaysInSeconds = delaysInSeconds });
config.UseFilter(new AutoDeleteAfterSuccessAttributer(TimeSpan.FromSeconds(5)));
config.UseFilter(new JobRetryLastFilter(Attempts));
});
}
@ -152,11 +157,10 @@ namespace Lion.AbpPro
/// <param name="context"></param>
private void ConfigurationMiniProfiler(ServiceConfigurationContext context)
{
context.Services.AddMiniProfiler(options => options.RouteBasePath = "/profiler")
.AddEntityFramework();
}
/// <summary>
/// 配置JWT
/// </summary>
@ -306,7 +310,6 @@ namespace Lion.AbpPro
Type = SecuritySchemeType.Http,
Scheme = JwtBearerDefaults.AuthenticationScheme,
BearerFormat = "JWT"
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{

26
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs

@ -0,0 +1,26 @@
using System;
using Hangfire.Common;
using Hangfire.States;
using Hangfire.Storage;
namespace Lion.AbpPro.Extensions.Filters;
public class AutoDeleteAfterSuccessAttributer : JobFilterAttribute, IApplyStateFilter
{
private readonly TimeSpan _deleteAfter;
public AutoDeleteAfterSuccessAttributer(TimeSpan timeSpan)
{
_deleteAfter = timeSpan;
}
public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
context.JobExpirationTimeout = _deleteAfter;
}
public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
}
}

0
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Jobs/CronType.cs → aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/CronType.cs

0
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Filters/CustomHangfireAuthorizeFilter.cs → aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs

28
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs

@ -0,0 +1,28 @@
using Hangfire.Common;
using Hangfire.States;
using Serilog;
namespace Lion.AbpPro.Extensions.Hangfire;
/// <summary>
/// 重试最后一次
/// </summary>
public class JobRetryLastFilter : JobFilterAttribute, IElectStateFilter
{
private int RetryCount { get; }
public JobRetryLastFilter(int retryCount)
{
RetryCount = retryCount;
}
public void OnStateElection(ElectStateContext context)
{
int retryAttempt = context.GetJobParameter<int>("RetryCount");
if (RetryCount == retryAttempt)
{
Log.Error("最后一次重试");
}
}
}

33
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Extensions/RecurringJobsExtensions.cs

@ -1,16 +1,17 @@
// using Hangfire;
// using Microsoft.Extensions.DependencyInjection;
// using System;
// using LionAbpPro.Jobs;
//
// namespace LionAbpPro.Extensions
// {
// public static class RecurringJobsExtensions
// {
// public static void CreateRecurringJob(this IServiceProvider service)
// {
// var job = service.GetService<TestJob>();
// RecurringJob.AddOrUpdate("测试Job", () => job.ExecuteAsync(), CronTypeHelper.Minute(1));
// }
// }
// }
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
namespace Lion.AbpPro.Jobs
{
public static class RecurringJobsExtensions
{
public static void CreateRecurringJob(this ApplicationInitializationContext context)
{
using var scope = context.ServiceProvider.CreateScope();
var testJob =
scope.ServiceProvider.GetService<TestJob>();
RecurringJob.AddOrUpdate("测试Job", () => testJob.ExecuteAsync(), CronType.Minute(1));
}
}
}

17
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Jobs/RecurringJobsExtensions.cs

@ -1,17 +0,0 @@
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
namespace Lion.AbpPro.Jobs
{
public static class RecurringJobsExtensions
{
public static void CreateRecurringJob(this ApplicationInitializationContext context)
{
using var scope = context.ServiceProvider.CreateScope();
var testJob =
scope.ServiceProvider.GetService<TestJob>();
RecurringJob.AddOrUpdate("测试Job", () => testJob.ExecuteAsync(), CronType.Minute(1));
}
}
}

1
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Lion.AbpPro.HttpApi.Host.csproj

@ -30,7 +30,6 @@
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="$(SerilogSinksElasticsearchVersion)" />
<PackageReference Include="Serilog.Sinks.File" Version="$(SerilogSinksFileVersion)" />
<PackageReference Include="Serilog.Sinks.Async" Version="$(SerilogSinksAsyncVersion)" />
<PackageReference Include="Serilog.Sinks.RollingFile" Version="$(SerilogSinksRollingFileVersion)" />
<PackageReference Include="Hangfire.MySqlStorage" Version="$(HangfireMySqlStorageVersion)" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="$(MicrosoftVersion)" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="$(AbpPackageVersion)" />

2
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.json

@ -2,7 +2,7 @@
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.RollingFile"
"Serilog.Sinks.File"
],
"MinimumLevel": {
"Default": "Debug",

Loading…
Cancel
Save