
Coravelは、開発者がタスク/ジョブスケジューリング、キューイング、キャッシュ、メーリング(およびその他!)などの高度なアプリケーション機能をアクセスしやすく簡単に作成することにより、.NETアプリケーションを迅速に稼働させるのを支援します。シンプルで表現力豊かで簡単な構文が付属しています。
ここで公式のドキュメントを表示できます。

通常、Windowsタスクスケジューラを介してCronジョブまたはタスクを構成して、実行する単一または複数の再発動タスクを取得する必要があります。
Coravelを使用すると、コードでシンプルでエレガントで流fluent的な構文を使用して、すべてのスケジュールされたタスクを1か所でセットアップできます。
Coravelは、ユーザーがHTTPリクエストが終了するのを待つ代わりに、インメモリを実行して背景にオフロードするゼロ構成キューを提供します!
Coravelは、.NETコアアプリケーションでキャッシュするために使いやすいAPIを提供します。
デフォルトでは、メモリ内キャッシュを使用しますが、より堅牢なシナリオのためにデータベースドライバーもあります!
Coravelのイベントブロードキャストは、パーツが大まかに結合されている保守可能なアプリケーションを構築するのに役立ちます!
電子メールは本来あるべきほど簡単ではありません。幸運なことに、Coravelはこれを提供して解決します。
appsettings.jsonを介したクイックでシンプルな構成BuyMeaCoffeeで進行中のオープンソース作業をサポートできます。
Coravelを使用して、スケジュールされた間隔でアクションを発行できる基本的な労働者サービスプロセスの構築を開始できる速さは次のとおりです。
dotnet new worker -n [NameOfYourApp] -o ./[NameOfYourApp]dotnet add package coravelProgram.csを以下に置き換えます。 using Coravel ;
Console . OutputEncoding = System . Text . Encoding . UTF8 ;
var builder = Host . CreateApplicationBuilder ( args ) ;
builder . Services . AddScheduler ( ) ;
var host = builder . Build ( ) ;
host . Services . UseScheduler ( s =>
{
s . Schedule ( ( ) => Console . WriteLine ( "It's alive! ?" ) ) . EverySecond ( ) ;
} ) ;
host . Run ( ) ;dotnet runそれだけです - 幸せなコーディング!
エンティティフレームワークを使用して.NETアプリケーションを構築している場合は、Coravel Proを調べてください。それは、あなたの.NETアプリを簡単に維持および管理するための管理パネルとツールです!
Hangfireはしばらくの間、Modern .Net(Core)の前に存在していました。 Coravelがそうではない機能をたくさん持っている素晴らしいツールです。特に:永続的なキュー、再試行メカニズム、多くのストレージドライバーのサポートなど。
ただし、(2023年3月現在)Still Stillは、真のasync/awaitネイティブにサポートしていません(こことここ)。これは、たとえば、Webアプリケーション内でHangfireを使用すると、I/O操作を実行するスレッドを使用する場合ほど効率的ではないことを意味します。
Coravelは、最新のC#と.NETプリミティブを念頭に置いて作成されました - async/awaitや.NETの組み込み依存噴射ユーティリティなど。つまり、Coravelは設定が容易になり、Webアプリケーションが着信HTTPリクエストに応答するために必要なスレッドで非常に効率的になりません。
Quartzは、.NETに移植された古いJavaライブラリです。それはまだ最新の.NET依存関係インジェクションツールに接続していません。 CoravelのAPIははるかに簡潔で理解できると考える人もいます。
たとえば、ドキュメントからこのサンプルをCoravelの作業方法と比較してください(たとえば、Coravelのスケジューラを「開始」および「停止」する方法を理解する必要はありませんが、クォーツスケジューラを手動で作業する必要があります)。
いいえ。少なくとも、まだ。
Coravel Processesはメモリ内のアイテムを並べました。アプリケーションがダウンしても、すべてのアイテムが処理されるまでアプリケーションがシャットダウンできなくなります。
Coravelの哲学は、他の.NETプリミティブとうまく協力することでした。つまり、他のライブラリを使用するのは簡単です。
Coravelは、Coravelが必要ではないものを膨らませないように非常に注意しているため、内部的に再試行メカニズムをサポートしていません。 Coravelが最善を尽くしていることに焦点を合わせたいと思います(たとえば、「ジョブスケジューリング、キューイングなど、追加のインフラストラクチャと複雑な構成を必要とせずに」)。
たとえば、Invocables内でPollyを使用してRETRIESを行うことができます。一部の人々は、組み込みの取得があるIInvocableから継承する基本クラスを構成します。
いいえ。ただし、これは、distributedlockのようなバトルテストされた分散ロックライブラリを使用することで再び実現できます。このようなInvocableのInvoke()を作成する場合があります。
public class TestInvocable : IInvocable
{
private ApplicationDbContext _context ;
private IDistributedLockProvider _distributedlock ;
public TestInvocable ( ApplicationDbContext context , IDistributedLockProvider distributedlock )
{
this . _context = context ;
this . _distributedlock = distributedlock ;
}
public async Task Invoke ( )
{
await using ( await this . _distributedlock . AcquireAsync ( ) )
{
await this . _context . Test . AddAsync ( new TestModel ( ) { Name = "test name" } ) ;
await this . _context . SaveChangesAsync ( ) ;
}
}
}