跨语言调用Hangfire定时做业服务

跨语言调用Hangfire定时做业服务

背景

Hangfire容许您以很是简单但可靠的方式执行后台定时任务的工做。内置对任务的可视化操做。很是方便。git

但使人遗憾的是广泛都是业务代码和hagnfire服务自己聚合在一个程序中运行,极大的限制了hangfire的扩展和跨语言调用。github

因此萌生了开发一个支持restful api调用的sdk库web

原本打算简单的创建webapi,内部再调用hangfire,可是一想实在不优雅,组件就应该尽可能聚合在一个库的中,偶然找到了一个已经开发了支持restfull api的hangfire组件,github地址=>Hangfire.Job数据库

看了下源码,调用了hangfire公开的接口获取请求路由信息,而后去hangfire去执行。只提供了单次执行和循环执行,其余场景能够参考代码扩展。json

可是调用方要经过http请求,不是很方便,因此扩展了一个Chaunce.Hangfire.Client 的C# sdk来调用hangfire。此库也已上传nugetapi

使用方式

第一步:

部署hangfire服务restful

  拉取Chaunce.Hangfire.Server(属于.netcore程序,支持跨平台部署)项目app

  而后修改appsettings.json文件asp.net

 "ConnectionStrings": {
    "HangfireConnection": "server=.;database={你想让hangfire生成的数据库名称};uid=sa;pwd=111111"
  },

以后在数据库创建与ppsettings.json中数据库名称一致的数据库。async

第二步:

使用hangfire客户端

创建asp.netcore 程序,并修改appsettings.json文件以下:

 "HangfireClientOptions": {
    "RecurringJobUrl": "hangfire/httpjob?op=recurringjob",
    "BackgroundJobUrl": "",
    "BaseUrl": "http://localhost:5000",
    "UserName": "admin",
    "PassWord":"test"
  }

修改Startup文件将Chaunce.Hangfire.Client注册到asp.netcore组件中,

public void ConfigureServices(IServiceCollection services)
        {
            var option = Configuration.GetSection(nameof(HangfireClientOptions)).Get<HangfireClientOptions>();

            services.AddHangfireClient(option);
        }

这里以Controller中使用为例:将IHangfireClient 注入构造函数进行使用

[Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly IHangfireClient _hangfireClient;
        public ValuesController(IHangfireClient hangfireClient)
        {
            _hangfireClient = hangfireClient;
        }
        // GET api/values
        [HttpGet]
        public async Task<ActionResult<IEnumerable<string>>> Get()
        {
            var result = await _hangfireClient.SendTimerJobAsync(new HttpJobItem
            {
                Corn = Cron.MinuteInterval(10),
                Url = "https://www.cnblogs.com/xiaoliangge/",
                JobName = "I'm external Job by restful Api",
            }, TaskType.Recurringjob);
            return new string[] { "Do i succeeded?", $"{result}" };
        }
    }

效果图

 Github地址:https://github.com/liuyl1992/Chaunce.Hangfire

相关文章
相关标签/搜索