跨語言調用Hangfire定時作業服務


跨語言調用Hangfire定時作業服務

背景

Hangfire允許您以非常簡單但可靠的方式執行后台定時任務的工作。內置對任務的可視化操作。非常方便。

但令人遺憾的是普遍都是業務代碼和hagnfire服務本身聚合在一個程序中運行,極大的限制了hangfire的擴展和跨語言調用。

所以萌生了開發一個支持restful api調用的sdk庫

本來打算簡單的建立webapi,內部再調用hangfire,但是一想實在不優雅,組件就應該盡量聚合在一個庫的中,偶然找到了一個已經開發了支持restfull api的hangfire組件,github地址=>Hangfire.Job

看了下源碼,調用了hangfire公開的接口獲取請求路由信息,然后去hangfire去執行。只提供了單次執行和循環執行,其他場景可以參考代碼擴展。

但是調用方要通過http請求,不是很方便,所以擴展了一個Chaunce.Hangfire.Client 的C# sdk來調用hangfire。此庫也已上傳nuget

使用方式

第一步:

部署hangfire服務

  拉取Chaunce.Hangfire.Server(屬於.netcore程序,支持跨平台部署)項目

  然后修改appsettings.json文件

 "ConnectionStrings": {
    "HangfireConnection": "server=.;database={你想讓hangfire生成的數據庫名稱};uid=sa;pwd=111111"
  },

之后在數據庫建立與ppsettings.json中數據庫名稱一致的數據庫。

第二步:

使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM