前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨语言调用Hangfire定时作业服务

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

作者头像
leon公众号精选
发布2022-04-27 14:58:27
7750
发布2022-04-27 14:58:27
举报
文章被收录于专栏:架构师高级俱乐部

背景

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文件

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

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

02

第二步:

使用hangfire客户端

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

代码语言:javascript
复制
 "HangfireClientOptions": {
    "RecurringJobUrl": "hangfire/httpjob?op=recurringjob",
    "BackgroundJobUrl": "",
    "BaseUrl": "http://localhost:5000",
    "UserName": "admin",
    "PassWord":"test"
  }
代码语言:javascript
复制
修改Startup文件将Chaunce.Hangfire.Client注册到asp.netcore组件中
代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
        {            var option = Configuration.GetSection(nameof(HangfireClientOptions)).Get<HangfireClientOptions>();

            services.AddHangfireClient(option);
        }

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

代码语言:javascript
复制
[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

效果图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师高级俱乐部 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 使用方式
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档