• 跨语言调用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

  • 相关阅读:
    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
    利用scp传输文件小结
    SSH无密码登录配置小结
    vim 清空
    mysql root用户 远程登录其它机器,看不到数据库
    音视频编解码开发经验2
    nginx、php-fpm、mysql用户权限解析
    ffmpeg处理RTMP流媒体的命令 发送流媒体的命令(UDP,RTP,RTMP)
    音视频编解码开发经验1
    mysql LAST_INSERT_ID 使用与注意事项
  • 原文地址:https://www.cnblogs.com/xiaoliangge/p/9616249.html
Copyright © 2020-2023  润新知