hangfire-简单开始

前提

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

存储

存储是Hangfire保存与后台作业处理相关的所有信息的地方。所有的细节,如类型、方法名、参数等都被序列化并放入存储中,没有数据被保存在进程的内存中。存储子系统在Hangfire中抽象得足够好,可以为RDBMS和NoSQL解决方案实现。
这是您必须做出的主要决定,也是开始使用框架之前所需的唯一配置。以下示例显示如何使用SQL Server数据库配置Hangfire。请注意,连接字符串可能会因环境而异。

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

客户端

客户端负责创建后台作业并将其保存到存储中。后台作业是应在当前执行上下文之外执行的一个工作单元,例如在后台线程、其他进程中,甚至在不同的服务器上执行,即使没有额外的配置,也可以使用Hangfire进行所有操作。

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

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

服务端

Hangfire服务器通过查询存储来处理后台作业。大致来说,这是一组后台线程,它们侦听存储以获取新的后台作业,并通过对类型、方法和参数进行反序列化来执行这些作业。
您可以将此后台作业服务器放置在所需的任何进程中,包括像ASP.NET这样的危险进程——即使您终止了进程,在重新启动后也会自动重试后台作业。因此,在web应用程序的基本配置中,您不再需要使用Windows服务进行后台处理。

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

安装

Hangfire作为两个NuGet包分发,从主要包Hangfire.Core开始,该包包含所有主要类和抽象。其他软件包如Hangfire.SqlServer提供了功能或抽象实现。要开始使用Hangfire,请安装主包并选择一个可用的存储。
Visual Studio 2017发布后,出现了一种全新的安装NuGet软件包的方式。因此,我放弃列出安装NuGet软件包的所有方法,转而使用几乎所有地方都可以使用的网络应用程序。

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
    })
    .UseBatches()
    .UsePerformanceCounters();

也可以使用内存存储
hangfire-简单开始_第1张图片

 GlobalConfiguration.Configuration
                .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                .UseSimpleAssemblyNameTypeSerializer()
                .UseRecommendedSerializerSettings()
                .UseMemoryStorage();

方法调用可以被链接,因此不需要反复使用类名。全局配置是为了简化,几乎每个Hangfire类都允许您为存储、筛选器等指定重写。在ASP.NET Core环境中,全局配置类隐藏在AddHangfire方法中。

使用案例

以下是所有正在运行的Hangfire组件,作为一个完整的示例,它从后台线程打印“Hello, world!”消息。您可以对与服务器相关的行进行注释,并多次运行程序——一旦再次取消注释这些行,所有后台作业都将立即处理。

using Hangfire;
using Hangfire.MemoryStorage;
using System;

namespace HangfireTest02
{
    internal class Program
    {
        static void Main(string[] args)
        {
            GlobalConfiguration.Configuration
                .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                .UseSimpleAssemblyNameTypeSerializer()
                .UseRecommendedSerializerSettings()
                .UseMemoryStorage();
            BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));

            using (var server = new BackgroundJobServer())
            {
                Console.ReadLine();
            }
            Console.ReadKey();
        }
    }
}

你可能感兴趣的:(dotnet,服务器,asp.net,数据库)