web-dev-qa-db-ja.com

Hangfire用のメモリ内ジョブストレージパッケージはありますか?

HangFireをテストするコンソールアプリケーションがあります。コードは次のとおりです。

using System;
using Hangfire;

namespace MyScheduler.ConsoleApp
{
    internal static class Program
    {
        internal static void Main(string[] args)
        {
            MyMethod();

            Console.WriteLine("[Finished]");
            Console.ReadKey();
        }

        private static void MyMethod()
        {
            RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
        }
    }
}

ただし、実行時に例外がスローされます。

追加情報:JobStorage.Currentプロパティ値は初期化されていません。 Hangfire ClientまたはServer APIを使用する前に設定する必要があります。

そのため、これを実行するにはジョブストレージが必要です。しかし、SQLストレージなどのすべての例。ある種のメモリストレージでこの例を実行する方法はありますか?

JobStorage.Current = new SqlServerStorage("ConnectionStringName", options);  
// to  
JobStorage.Current = new MemoryDbStorage(string.Empty, options);  
20
Lost_In_Library

これには Hangfire.MemoryStorage を使用できます。

このnugetパッケージ を追加するだけです。

そして、あなたはそれを次のように使用することができます-

GlobalConfiguration.Configuration.UseMemoryStorage();
41
Yogi

NET Core(Webアプリケーション)の場合:

それは私には明らかではなかったので、それを非常に明白にするためです。

次のnugetパッケージをインストールします。

  • Hangfire .AspNet Core(v1.6.17 atow)
  • Hangfire.MemoryStorage.Core(v1.4.0 atow)

Startup.csで:

    public void ConfigureServices(IServiceCollection services)
    {
        // other registered services
        ...

        services.AddHangfire(c => c.UseMemoryStorage());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // other pipeline configuration            
        ...

        app.UseHangfireServer();

        app.UseMvc();
    }

上記よりも小さく、キューに登録されたメソッドは起動しませんでした。

17
Quinton Smith

Yogiが言ったように、Hangfire.MemoryStorageまたはHangfire.MemoryStorage.Core(.Net Core用)を使用できます。

その答えに欠けているのは、ConfigureServices(..)内に配置する必要がある完全なコード(.Net Core用)です。

var inMemory = GlobalConfiguration.Configuration.UseMemoryStorage();
services.AddHangfire(x => x.UseStorage(inMemory));
3
goamn