要求

Hangfire 适用于大多数 .NET 平台:.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何与 .NET Standard 1.3 兼容的平台。您可以将它与几乎任何应用程序框架集成,包括 ASP.NET、ASP.NET Core、控制台应用程序、Windows 服务、WCF,以及社区驱动的框架,如 Nancy 或 ServiceStack。

存储

存储是 Hangfire 保存与后台作业处理相关的所有信息的地方。类型、方法名称、参数等所有细节都被序列化并放入存储中,没有数据保存在进程的内存中。存储子系统在 Hangfire 中被很好地抽象出来,可以为 RDBMS 和 NoSQL 解决方案实现。

这是您必须做出的主要决定,也是开始使用框架之前所需的唯一配置。以下示例显示如何使用 SQL Server 数据库配置 Hangfire。请注意,连接字符串可能会有所不同,具体取决于您的环境。

GlobalConfiguration.Configuration.UseSqlServerStorage(@"Server=.\SQLEXPRESS; Database=Hangfire.Sample; Integrated Security=True");

客户端

Client 负责创建后台作业并将它们保存到 Storage 中。后台作业是一个应该在当前执行上下文之外执行的工作单元,例如在后台线程、其他进程中,甚至在不同的服务器上——这一切都可以通过 Hangfire 实现,即使没有额外的配置。

BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));

请注意,这不是委托,而是表达式树。Hangfire 不是立即调用该方法,而是序列化类型 ( System.Console)、方法名称 ( WriteLine,带有所有参数类型以便稍后识别它) 和所有给定的参数,并将其放入 Storage。

服务器

Hangfire Server 通过查询存储来处理后台作业。粗略地说,它是一组后台线程,它们侦听 Storage 以获取新的后台作业,并通过反序列化类型、方法和参数来执行它们。

您可以将此后台作业服务器放置在您想要的任何进程中,包括像 ASP.NET 这样的危险进程——即使您终止了一个进程,您的后台作业也会在重新启动后自动重试。因此,在 Web 应用程序的基本配置中,您不再需要使用 Windows 服务进行后台处理。

using (new BackgroundJobServer())
{Console.ReadLine();
}

安装

Hangfire 作为几个 NuGet 包分发,从主要的 Hangfire.Core 开始,它包含所有主要类和抽象。其他包如 Hangfire.SqlServer 提供功能或抽象实现。要开始使用 Hangfire,请安装主软件包并选择可用的存储空间之一。

Visual Studio 2017 发布后,出现了一种全新的 NuGet 包安装方式。所以我放弃了列出安装 NuGet 包的所有方法,并回退到使用该dotnet应用程序几乎在任何地方都可用的方法。

dotnet add package Hangfire.Core
dotnet add package Hangfire.SqlServer

配置

使用GlobalConfiguration类执行配置。它的Configuration属性提供了很多扩展方法,既有来自 Hangfire.Core 的,也有来自其他包的。如果你安装了一个新的包,不要犹豫,检查是否有新的扩展方法。

GlobalConfiguration.Configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170).UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings().UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions{CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),QueuePollInterval = TimeSpan.Zero,UseRecommendedIsolationLevel = true,UsePageLocksOnDequeue = true,DisableGlobalLocks = true}).UseBatches().UsePerformanceCounters();

方法调用可以链接起来,因此不需要一次又一次地使用类名。全局配置是为了简单起见,几乎每个 Hangfire 类都允许您指定存储、过滤器等的覆盖。在 ASP.NET Core 环境中,全局配置类隐藏在AddHangfire方法中。

用法

以下是所有运行中的 Hangfire 组件,作为打印“Hello, world!”的完整工作示例。来自后台线程的消息。您可以注释与服务器相关的行,并多次运行该程序——只要您再次取消注释这些行,就会处理所有后台作业。

using System;
using Hangfire;
using Hangfire.SqlServer;namespace ConsoleApplication2
{class Program{static void Main(){GlobalConfiguration.Configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170).UseColouredConsoleLogProvider().UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings().UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions{CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),QueuePollInterval = TimeSpan.Zero,UseRecommendedIsolationLevel = true,UsePageLocksOnDequeue = true,DisableGlobalLocks = true});BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));using (var server = new BackgroundJobServer()){Console.ReadLine();}}}
}

hangfire入门相关推荐

  1. Hangfire入门(任务调度)

    一.简介 英文官网:http://hangfire.io/ 开源地址:https://github.com/HangfireIO Hangfire 不依赖于具体的.NET应用类型,包含.NET 和.N ...

  2. hangfire mysql_.NET之Hangfire快速入门和使用

    文章正文: 前言: 定时任务调度问题,是一个老生常谈的问题.网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度 ...

  3. hangfire支持mysql_快速入门 - Hangfire.HttpJob 中文文档

    先介绍下 Hangfire.HttpJob 自身引用的组件 Hangfire.AspNetCore (因为Hangfire.HttpJob是作为Hangfire的插件,Hangfire.AspNetC ...

  4. .NET中Hangfire快速入门和使用-迷恋自留地

    前言: 定时任务调度问题,是一个老生常谈的问题.网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quar ...

  5. .NET之Hangfire快速入门和使用 (定时任务调度的一种解决方案)

    注意: 1. 当Hangfire服务由Web程序来启用时,默认情况下,web应用程序中的Hangfire服务器实例在第一个用户访问您的站点之前不会启动.甚至,有一些事件会在一段时间后导致web应用程序 ...

  6. ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

    一.Redis是什么? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset ...

  7. .NET Core开源组件:后台任务利器之Hangfire

    一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always ru ...

  8. OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  9. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

最新文章

  1. 10个最佳Node.js企业应用案例:从Uber到LinkedIn
  2. api地理编码_通过地理编码API使您的数据更有意义
  3. 这个城市推出黄金“外卖”!价值低于5.8万元的,只能摩托车配送...
  4. uniapp/vue 组件之间的传值
  5. Idea安装Eslint插件详解 提示:Plugin NativeScript was not installed解决
  6. 信息系统设计之软件设计和系统架构
  7. mDNS原理的简单理解
  8. 【转】职场学做“功夫熊猫”
  9. 定向光流直方图是什么_OpenCV计算机视觉编程攻略(第3版)
  10. 华为 ensp 部分查询方法
  11. Laravel自带SMTP邮件组件实现发送邮件(QQ、163、企业邮箱都可)
  12. 机器学习入门-西瓜书总结笔记第十六章
  13. MoveIt轨迹规划问题
  14. 吴恩达深度学习第一课--第二周神经网络基础作业上正反向传播推导
  15. python导入包的输入法_python使用idle edit编辑器时,中文输入法下遇到r、p、t、y时产生热键冲突...
  16. 关于Raft算法的共识性算法考究
  17. 用计算机搞音乐,您的计算机作为音乐来源:您如何做?
  18. 对NFT许可的观察:事实与虚构
  19. 博士申请 | 香港科技大学李小萌老师招收深度学习方向全奖博士/博后/RA
  20. nfc读卡java开发,Android通过NFC读取IC卡示例

热门文章

  1. Qmail+Mini Howto
  2. 3.8 使用切片工具制作网页 [Ps教程]
  3. java swing 下拉复选框_Java Swing JCheckBox复选框的实现方法
  4. 华为交换机关闭服务端口
  5. 使用 ChatterBot 做简单的机器人
  6. SpringBoot项目启动报错:Field userMapper in com.demo.controller.MemberController required a bean of type ‘c
  7. AutoMapper源码解析
  8. IDEA小技巧之痛苦面具 主菜单不见了怎么办?
  9. 使用IntelliJ IDEA创建Java项目
  10. 华中科技大学计算机网络教材,华中科技大学计算机网络复习资料.ppt