我是靠谱客的博主 内向冥王星,最近开发中收集的这篇文章主要介绍XxlJob使用netcore webapi 作为Executor,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java项目对netcore支持问题

经过验证发现一个可以组件,nuget 获取DotXxlJob.Core,支持XXL-JOB 2.2+正好配合2.3.0 XxlJob

源码地址https://github.com/xuanye/DotXxlJob

目前只实现了BEAN的方式,即直接实现IJobHandler调用的方式

作者提供的中间件,具体用法请看github说明

 public class XxlJobExecutorMiddleware
{
private readonly IServiceProvider _provider;
private readonly RequestDelegate _next;
private readonly XxlRestfulServiceHandler _rpcService;
public XxlJobExecutorMiddleware(IServiceProvider provider, RequestDelegate next)
{
this._provider = provider;
this._next = next;
this._rpcService = _provider.GetRequiredService<XxlRestfulServiceHandler>();
}
public async Task Invoke(HttpContext context)
{
string contentType = context.Request.ContentType;
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);
}
}

使用问题

  1. 中间件问题,例子虽然可用,但是拦截的全部POST请求,所以如果引入整合项目会影响其他请求需要进一步限制"run", "beat", "idlebeat", "kill", "log" xxljob专用方法,并且要避免使用这几个关键路由

  1. 因为不是用的XxlJob官方代码,看上篇文章,使用的魔改的sqlserver版,所以日志雪花long id的问题DotXxlJob.Core作者似乎没改全,最后解决办法看DotXxlJob.Core源码,将XxlRestfulServiceHandler中使用的日志id改为long,并重新实现XxlRestfulServiceHandler替换LogRequest

[DataContract]
public class LogRequestExt
{
[DataMember(Name = "logDateTim", Order = 1)]
public long LogDateTime { get; set; }
[DataMember(Name = "logId", Order = 2)]
public long LogId { get; set; }
[DataMember(Name = "fromLineNum", Order = 3)]
public int FromLineNum { get; set; }
}
//并重新实现XxlRestfulServiceHandlerExt替换LogRequest
services.AddSingleton<XxlRestfulServiceHandlerExt>();
  1. 最后配置文件注意accessToken与XxlJobAdmin一致

最后

以上就是内向冥王星为你收集整理的XxlJob使用netcore webapi 作为Executor的全部内容,希望文章能够帮你解决XxlJob使用netcore webapi 作为Executor所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部