[feat] 新增AddAntJob扩展,简化蚂蚁调度的使用

This commit is contained in:
智能大石头 2025-07-14 10:41:56 +08:00
parent 98d4c1114c
commit 931e884876
11 changed files with 107 additions and 30 deletions

View File

@ -32,7 +32,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.701" />
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.713-beta1409" />
</ItemGroup>
<ItemGroup>

View File

@ -11,23 +11,12 @@ var services = ObjectContainer.Current;
services.AddStardust();
var set = AntSetting.Current;
services.AddSingleton(set);
// 实例化调度器
var scheduler = new Scheduler
{
ServiceProvider = services.BuildServiceProvider(),
Log = XTrace.Log,
};
scheduler.Join(set);
// 添加作业处理器
//sc.Handlers.Add(new CSharpHandler());
scheduler.AddHandler<SqlHandler>();
scheduler.AddHandler<SqlMessage>();
// 启动调度引擎,调度器内部多线程处理
scheduler.StartAsync();
services.AddAntJob()
.AddHandler<SqlHandler>()
.AddHandler<SqlMessage>();
// 友好退出
var host = services.BuildHost();

View File

@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;netstandard2.0;net461;net45</TargetFrameworks>
<TargetFrameworks>netstandard2.1;netstandard2.0;net45</TargetFrameworks>
<AssemblyTitle>蚂蚁数据调度SDK</AssemblyTitle>
<Description>分布式任务调度系统纯NET打造的重量级大数据实时计算平台万亿级调度经验积累。</Description>
<Company>新生命开发团队</Company>
<Copyright>©2002-2025 NewLife</Copyright>
<VersionPrefix>4.1</VersionPrefix>
<VersionPrefix>4.2</VersionPrefix>
<VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
<Version>$(VersionPrefix).$(VersionSuffix)</Version>
<FileVersion>$(Version)</FileVersion>
@ -45,6 +45,7 @@
<ItemGroup>
<PackageReference Include="NewLife.XCode" Version="11.19.2025.701" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AntJob\AntJob.csproj" />
</ItemGroup>

View File

@ -45,8 +45,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.701" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.3.2025.701" />
<PackageReference Include="NewLife.Stardust.Extensions" Version="3.4.2025.701" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.713-beta1545" />
<PackageReference Include="NewLife.Stardust.Extensions" Version="3.4.2025.713-beta1409" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AntJob.Data\AntJob.Data.csproj" />

View File

@ -6,7 +6,7 @@
<Description>分布式任务调度系统纯NET打造的重量级大数据实时计算平台万亿级调度经验积累。</Description>
<Company>新生命开发团队</Company>
<Copyright>©2002-2025 NewLife</Copyright>
<VersionPrefix>4.1</VersionPrefix>
<VersionPrefix>4.2</VersionPrefix>
<VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
<Version>$(VersionPrefix).$(VersionSuffix)</Version>
<FileVersion>$(Version)</FileVersion>
@ -49,9 +49,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.701" />
<PackageReference Include="NewLife.Remoting" Version="3.3.2025.701" />
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.701" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.713-beta1545" />
<PackageReference Include="NewLife.Stardust" Version="3.4.2025.713-beta1409" />
</ItemGroup>
<ItemGroup>

View File

@ -0,0 +1,35 @@
using NewLife.Configuration;
using NewLife.Log;
using NewLife.Model;
namespace AntJob;
/// <summary>蚂蚁调度依赖注入</summary>
public static class AntJobExtensions
{
/// <summary>注入AndJob</summary>
/// <param name="services"></param>
/// <returns></returns>
public static Scheduler AddAntJob(this IObjectContainer services)
{
// 实例化调度器
var scheduler = new Scheduler();
services.AddBasic();
services.AddSingleton(scheduler);
services.AddHostedService<AntJobWorker>();
return scheduler;
}
static void AddBasic(this IObjectContainer services)
{
// 注册依赖项
services.TryAddSingleton(XTrace.Log);
services.TryAddSingleton(DefaultTracer.Instance ??= new DefaultTracer());
if (!services.Services.Any(e => e.ServiceType == typeof(IConfigProvider)))
services.TryAddSingleton<IConfigProvider>(JsonConfigProvider.LoadAppSettings());
}
}

39
AntJob/AntJobWorker.cs Normal file
View File

@ -0,0 +1,39 @@
using NewLife;
using NewLife.Log;
using NewLife.Model;
#if !NET45
using TaskEx = System.Threading.Tasks.Task;
#endif
namespace AntJob;
class AntJobWorker(Scheduler scheduler, IServiceProvider serviceProvider) : BackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
// 实例化调度器
scheduler.ServiceProvider = serviceProvider;
scheduler.Log = serviceProvider.GetService<ILog>();
scheduler.Tracer = serviceProvider.GetService<ITracer>();
var set = serviceProvider.GetService<AntSetting>();
set ??= AntSetting.Current;
scheduler.Join(set);
// 添加作业
//scheduler.AddHandler<HelloJob>();
// 启动调度引擎,调度器内部多线程处理
scheduler.StartAsync();
return TaskEx.CompletedTask;
}
public override Task StopAsync(CancellationToken cancellationToken)
{
scheduler.TryDispose();
scheduler = null;
return base.StopAsync(cancellationToken);
}
}

View File

@ -41,11 +41,16 @@ public class Scheduler : DisposeBase
#region
/// <summary>添加处理器</summary>
/// <param name="handler"></param>
public void AddHandler(Handler handler) => Handlers.Add(handler);
public Scheduler AddHandler(Handler handler)
{
Handlers.Add(handler);
return this;
}
/// <summary>按类型添加处理器,支持依赖注入</summary>
/// <typeparam name="T"></typeparam>
public void AddHandler<T>() where T : Handler
public Scheduler AddHandler<T>() where T : Handler
{
var prv = ServiceProvider;
if (prv == null)
@ -59,6 +64,8 @@ public class Scheduler : DisposeBase
var handler = prv.GetService<T>() ?? prv.CreateInstance(typeof(T)) as T;
Handlers.Add(handler);
return this;
}
#endregion

View File

@ -12,7 +12,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -9,6 +9,10 @@
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Remove="JobHost.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\AntJob.Extensions\AntJob.Extensions.csproj" />
<ProjectReference Include="..\..\AntJob\AntJob.csproj" />

View File

@ -12,9 +12,11 @@ services.AddStardust();
services.AddSingleton(AntSetting.Current);
services.AddAntJob()
.AddHandler<HelloJob>()
.AddHandler<BuildPatient>()
.AddHandler<BuildWill>();
// 友好退出
var host = services.BuildHost();
host.Add<JobHost>();
await host.RunAsync();