跨项目调用controller_跨语言调用Hangfire定时作业服务

497abbe255cba64fa8feb91cdd113d9f.gif 6e0860bf0456da259dbb2675d7ff4ea7.gif

背景

ebf00b6e28d85d662822237f1227cdff.png 15a72844b8ee6b07642fb3df5a6e3468.png

Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作。内置对任务的可视化操作。非常方便。

但令人遗憾的是普遍都是业务代码和hagnfire服务本身聚合在一个程序中运行,极大的限制了hangfire的扩展和跨语言调用。

所以萌生了开发一个支持restful api调用的sdk库

本来打算简单的建立webapi,内部再调用hangfire,但是一想实在不优雅,组件就应该尽量聚合在一个库的中,偶然找到了一个已经开发了支持restfull api的hangfire组件,github地址=>Hangfire.Jobgithub链接

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

但是调用方要通过http请求,不是很方便,所以扩展了一个Chaunce.Hangfire.Clientgithubl链接  的C# sdk来调用hangfire。此库也已上传nuget

6e0860bf0456da259dbb2675d7ff4ea7.gif

使用方式

0 1第一步:

部署hangfire服务

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

  然后修改appsettings.json文件

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

之后在数据库建立与ppsettings.json中数据库名称一致的数据库。

0 2第二步:

使用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();            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>> 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}" };        }    }
0 3效果图

ff717710126b2c5216fe45cae2385f30.gif


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

7bb8a4c05ae3a46cb2491eaeb9fb51a1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值