跨语言调用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(),
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
跨语言调用Hangfire定时作业服务的更多相关文章
- Golang通过Thrift框架完美实现跨语言调用
每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序. 做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯.采用http协议简单,但性能不高.采用TCP通讯,则需要 ...
- Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...
- 使用thrift进行跨语言调用(php c# java)
使用thrift进行跨语言调用(php c# java) 1:前言 实际上本文说的是跨进程的异构语言调用,举个简单的例子就是利用PHP写的代码去调C#或是java写的服务端.其实除了本文提供的办法 ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- C++ 跨语言调用 Java
C++ 跨语言调用 Java Java JDK 提供了 JNI 接口供 C/C++ 程序调用 Java 编译后的类与方法,主要依赖于头文件(jni.h) 和 动态库(jvm.so/jvm.dll),由 ...
- vs2019 Com组件初探-简单的COM编写以及实现跨语言调用
前提条件 1.掌握C++基础语法 2.平台安装 vs2019 3.本地平台为 windows 10 1909 X64 4.了解vbs基础语法 本次目标 1.掌握Com组件的概念及原理 2.编写一个简单 ...
- Java跨语言调用,使用JNA访问Java外部接口
1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即 ...
- CLS(公共语言规范)的CLSCompliant(跨语言调用)
.net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:用C#写的一个类,编译到dll中,然后在VB.net中调用: using System;namespace ...
- 跨语言调用C#代码的新方式-DllExport
简介 上一篇文章使用C#编写一个.NET分析器文章发布以后,很多小伙伴都对最新的NativeAOT函数导出比较感兴趣,今天故写一篇短文来介绍一下如何使用它. 在以前,如果有其他语言需要调用C#编写的库 ...
随机推荐
- Scala视图界定
package big.data.analyse.dataSet /** * 视图界定 * Created by zhen on 2018/11/29. */ /*class Pair_NotPerf ...
- win10 出现0x80072efd错误
0x80072efd 0x80072efd 是网络问题,windows更新或windows应用商店出现0x80072efd问题,请检查本机代理,是否开着小飞机(Shadowsocks)之类的代理工具. ...
- postgresql自定义类型并返回数组
转自 https://blog.csdn.net/victor_ww/article/details/44415895 create type custom_data_type as ( id int ...
- shell的case用法
今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支if语句,如下: case语法: case "字符串变量" in 值1)指令1... ;; 值2)指令2... ;; ...
- LeetCode算法题-Add Digits(Java实现-3种解法)
这是悦乐书的第199次更新,第207篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第63题(顺位题号是258).给定非负整数num,重复添加其所有数字,直到结果只有一位数 ...
- March 04th, 2018 Week 10th Sunday
Tomorrow never comes. 我生待明日,万事成蹉跎. Most of my past failures can be chalked up to the bad habit of pr ...
- webpack常见的配置项
使用vue init webpack test(项目文件夹名)命令初始化一个vue项目,cd test,然后安装依赖npm install之后会生成一些默认的文件夹和文件,这些文件和文件夹中有些和配置 ...
- 阿里云短信服务调用例子-Python
阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...
- spring boot 的maven设置阿里云仓库
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
- dp 洛谷P1977 出租车拼车 线性dp
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...