Quellcode durchsuchen

增加事件执行器

zuohuaijun vor 3 Jahren
Ursprung
Commit
f107c7c0d3

+ 1 - 1
Admin.NET/Admin.NET.Application/Service/JobTimer.cs

@@ -19,7 +19,7 @@ public class JobTimer : ISpareTimeWorker
         //// 写日志文件
         //// 写日志文件
         //StringLoggingPart.Default.SetMessage("这是一个日志").LogInformation();
         //StringLoggingPart.Default.SetMessage("这是一个日志").LogInformation();
 
 
-        Scoped.Create(async (_, scope) =>
+        Scoped.Create((_, scope) =>
         {
         {
             var services = scope.ServiceProvider;
             var services = scope.ServiceProvider;
             var db = services.GetService<ISqlSugarClient>();
             var db = services.GetService<ISqlSugarClient>();

+ 5 - 0
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -2649,6 +2649,11 @@
             <param name="context"></param>
             <param name="context"></param>
             <returns></returns>
             <returns></returns>
         </member>
         </member>
+        <member name="T:Admin.NET.Core.RetryEventHandlerExecutor">
+            <summary>
+            事件执行器-超时控制、失败重试熔断等等
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.EnumExtension">
         <member name="T:Admin.NET.Core.EnumExtension">
             <summary>
             <summary>
             枚举拓展
             枚举拓展

+ 16 - 0
Admin.NET/Admin.NET.Core/EventBus/RetryEventHandlerExecutor.cs

@@ -0,0 +1,16 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 事件执行器-超时控制、失败重试熔断等等
+/// </summary>
+public class RetryEventHandlerExecutor : IEventHandlerExecutor
+{
+    public async Task ExecuteAsync(EventHandlerExecutingContext context, Func<EventHandlerExecutingContext, Task> handler)
+    {
+        // 如果执行失败,每隔 1s 重试,最多三次
+        await Retry.InvokeAsync(async () =>
+        {
+            await handler(context);
+        }, 3, 1000);
+    }
+}

+ 1 - 1
Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj

@@ -10,7 +10,7 @@
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="Furion.Pure.Xunit" Version="4.1.12" />
     <PackageReference Include="Furion.Pure.Xunit" Version="4.1.12" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.8" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.8" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.0" />
     <PackageReference Include="xunit" Version="2.4.2" />
     <PackageReference Include="xunit" Version="2.4.2" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

+ 3 - 0
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -58,7 +58,10 @@ public class Startup : AppStartup
         // 事件总线
         // 事件总线
         services.AddEventBus(builder =>
         services.AddEventBus(builder =>
         {
         {
+            // 订阅日志事件
             builder.AddSubscriber<LogEventSubscriber>();
             builder.AddSubscriber<LogEventSubscriber>();
+            // 事件执行器(失败重试)
+            builder.AddExecutor<RetryEventHandlerExecutor>();
         });
         });
 
 
         // OSS对象存储(必须一个个赋值)
         // OSS对象存储(必须一个个赋值)