亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Abp集成HangFire開(kāi)源.NET任務(wù)調(diào)度框架

 更新時(shí)間:2022年04月29日 10:18:03   作者:張飛洪  
這篇文章主要為大家介紹了Abp集成HangFire開(kāi)源.NET任務(wù)調(diào)度框架的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡(jiǎn)要說(shuō)明

后臺(tái)作業(yè)在系統(tǒng)開(kāi)發(fā)的過(guò)程當(dāng)中,是比較常用的功能。因?yàn)榭偸怯幸恍╅L(zhǎng)耗時(shí)的任務(wù),而這些任務(wù)我們不是立即響應(yīng)的,例如 Excel 文檔導(dǎo)入、批量發(fā)送短信通知等。

ABP vNext 提供了后臺(tái)作業(yè)的支持,并且還提供了對(duì) HangFire 和 RabbitMQ 的后臺(tái)作業(yè)集成。開(kāi)發(fā)人員在使用這些第三方庫(kù)的時(shí)候,基本就是開(kāi)箱即用,不需要做其他復(fù)雜的配置。

ABP vNext 的實(shí)現(xiàn)就是在 CLR 的 Timer 之上封裝了一層,周期性地執(zhí)行用戶(hù)邏輯。
ABP vNext 默認(rèn)提供的 后臺(tái)任務(wù)管理器,就是在后臺(tái)作業(yè)基礎(chǔ)之上進(jìn)行的封裝。

涉及到后臺(tái)任務(wù)的模塊一共有 6 個(gè),它們分別是:

  • Volo.Abp.Threading :提供了一些常用的線程組件,其中 AbpTimer 就是在里面實(shí)現(xiàn)的。
  • Volo.Abp.BackgroundWorkers :后臺(tái)任務(wù)的定義和實(shí)現(xiàn)。
  • Volo.Abp.BackgroundJobs.Abstractions :后臺(tái)任務(wù)的一些共有定義。
  • Volo.Abp.BackgroundJobs :默認(rèn)的后臺(tái)任務(wù)管理器實(shí)現(xiàn)。
  • Volo.Abp.BackgroundJobs.HangFire :基于 Hangfire 庫(kù)實(shí)現(xiàn)的后臺(tái)任務(wù)管理器。
  • Volo.Abp.BackgroundJobs.RabbitMQ :基于 RabbitMQ 實(shí)現(xiàn)的后臺(tái)任務(wù)管理器。

什么是Hangfire

Hangfire 是一個(gè)開(kāi)源的.NET任務(wù)調(diào)度框架,目前1.6+版本已支持.NET Core。個(gè)人認(rèn)為它最大特點(diǎn)在于內(nèi)置提供集成化的控制臺(tái),方便后臺(tái)查看及監(jiān)控。

引用

<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" />

啟動(dòng)

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()
               {
                   //活動(dòng)服務(wù)器超時(shí)時(shí)間
                   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), //計(jì)劃輪詢(xún)間隔  支持任務(wù)到秒
           };
           app.UseHangfireServer(jobOptions);
       }
   }

設(shè)置

///
   /// 已完成的job設(shè)置過(guò)期,防止數(shù)據(jù)無(wú)限增長(zhǎng)
   ///
   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)
       {
       }
   }

以上就是Abp集成HangFire開(kāi)源.NET任務(wù)調(diào)度框架的詳細(xì)內(nèi)容,更多關(guān)于Abp集成HangFire框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論