1、Nuget安装
2、在appsettings.json添加配置文件
"xxlJob": {
//xxl-job管理地址
"adminAddresses": "http://192.168.10.103:8080/xxl-job-admin",
//调度器名称
"appName": "xxl-job-executor-dotnet",
//被调度的地址
"specialBindAddress": "192.168.10.103",
//被调度的端口
"port": 9000,
"autoRegistry": true,
//xxl-job的token
"accessToken": "default_token",
"logRetentionDays": 30
}
注意:accessToken必须和xxl-job的一致,否则注册不上
3、添加xxljob,调度工具类执行方法
/// <summary>
/// xxljob,调度工具类
/// </summary>
[JobHandler("xxlJobToolTest")]
public class XxlJobTool : AbstractJobHandler
{
/// <summary>
/// 任务执行
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public override Task<ReturnT> Execute(JobExecuteContext context)
{
LogTool.Debug("任务执行完成");
return Task.FromResult(ReturnT.SUCCESS);
}
}
注意:[JobHandler("xxlJobToolTest")], 这个名称必须要小写开头,否则调度不进执行方法
4、添加扩展方法。拦截请求方法,然后判断body内容之后执行到调度方法
/// <summary>
/// 程序注册
/// </summary>
public static class ApplicationBuilderExtensions
{
/// <summary>
/// 程序注册启用
/// </summary>
/// <param name="this"></param>
/// <returns></returns>
public static IApplicationBuilder UseXxlJobExecutor(this IApplicationBuilder @this)
{
return @this.UseMiddleware<XxlJobExecutorMiddleware>();
}
}
/// <summary>
/// 注册中间件
/// </summary>
public class XxlJobExecutorMiddleware
{
private readonly IServiceProvider _provider;
private readonly RequestDelegate _next;
private readonly XxlRestfulServiceHandler _rpcService;
/// <summary>
/// 构造
/// </summary>
/// <param name="provider"></param>
/// <param name="next"></param>
public XxlJobExecutorMiddleware(IServiceProvider provider, RequestDelegate next)
{
this._provider = provider;
this._next = next;
this._rpcService = _provider.GetRequiredService<XxlRestfulServiceHandler>();
}
/// <summary>
/// 执行
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task Invoke(HttpContext context)
{
string contentType = context.Request.ContentType ?? string.Empty;
if ("POST".Equals(context.Request.Method, StringComparison.OrdinalIgnoreCase)
&& !string.IsNullOrEmpty(contentType)
&& contentType.ToLower().StartsWith("application/json"))
{
await _rpcService.HandlerAsync(context.Request, context.Response);
return;
}
await _next.Invoke(context);
}
}
5、在Program.cs注册
//xxljob
IConfiguration configuration = builder.Configuration;
builder.Services.AddSingleton<IJobHandler, XxlJobTool>();
builder.Services.AddXxlJobExecutor(configuration);
builder.Services.AddDefaultXxlJobHandlers();
builder.Services.AddAutoRegistry();
app.UseXxlJobExecutor();
6、启动程序后在执行器可以看到程序注册的地址
可以携带参数进入