跨语言调用Hangfire定时作业服务
背景
Hangfire允許您以非常簡單但可靠的方式執行后臺定時任務的工作。內置對任務的可視化操作。非常方便。
但令人遺憾的是普遍都是業務代碼和hagnfire服務本身聚合在一個程序中運行,極大的限制了hangfire的擴展和跨語言調用。
所以萌生了開發一個支持restful api調用的sdk庫
本來打算簡單的建立webapi,內部再調用hangfire,但是一想實在不優雅,組件就應該盡量聚合在一個庫的中,偶然找到了一個已經開發了支持restfull api的hangfire組件,github地址=>Hangfire.Jobgithub鏈接
看了下源碼,調用了hangfire公開的接口獲取請求路由信息,然后去hangfire去執行。只提供了單次執行和循環執行,其他場景可以參考代碼擴展。
但是調用方要通過http請求,不是很方便,所以擴展了一個Chaunce.Hangfire.Clientgithubl鏈接??的C# sdk來調用hangfire。此庫也已上傳nuget
使用方式
01第一步:
部署hangfire服務
拉取Chaunce.Hangfire.Server(屬于.netcore程序,支持跨平臺部署)項目
然后修改appsettings.json文件
"ConnectionStrings": {? ?"HangfireConnection": "server=.;database={你想讓hangfire生成的數據庫名稱};uid=sa;pwd=111111"
?},
之后在數據庫建立與ppsettings.json中數據庫名稱一致的數據庫。
02第二步:
使用hangfire客戶端
建立asp.netcore 程序,并修改appsettings.json文件如下:
這里以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}" }; } }03效果圖
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的跨语言调用Hangfire定时作业服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET中的值类型与引用类型
- 下一篇: 可落地微服务on k8s的持续集成/部署