.NETのコアオープンソースコンポーネント:Hangfireのバックグラウンドタスクの武器
I.説明
Hangfire高い人気とバックエンドの分散実行サービスを使いやすいように、複数のデータベースをサポートしています。.NETのコア環境では、内蔵のDIコアはNF4.Xに環境を構成する必要がなくなりライフサイクルを管理し、常に実行している、本当に箱から出して、トラブルを。
II。インストール
Hangfie公式サポートは、MSSQLとRedisのある、加えて、代替があるのPostgreSQLとモンゴ。
アプリケーションポータルでプロジェクトが参照する必要がHangfire.AspNetCoreや、MSSQLデータベースの使用など、永続的な固有のライブラリ、Hangfire.SqlServerを。
(そのようなプロジェクトBLL層のような)他のプロジェクトにしながら、単にの基礎参照Hangfire.Coreそれを。
三.Startup設定
1. Hnagfireサービスを埋めます
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
2.オプション
次のようにHangfireサービスと対応するウェブパネルを起動します。
app.UseHangfireServer();//启动Hangfire服务 app.UseHangfireDashboard();//启动hangfire面板
気配りの視聴者がより多くのコンフィギュレーションを提供することができ、これらの2つの方法がオプションのパラメータを持っているかもしれません。
2.1設定タスクのプロパティ
var jobOptions = new BackgroundJobServerOptions { Queues = new[] { "test","default" },//队列名称,只能为小写 WorkerCount = Environment.ProcessorCount * 5, //并发任务数 ServerName="hangfire1",//服务器名称 }; app.UseHangfireServer(jobOptions);
Queues
リストキューが処理されるように
データベースに接続された複数のサーバの場合は、Hangfireは、彼らが一部に分布していると思います。現実には、多くの場合、異なるサーバでの有意差は、この時間は処理キューの合理的な配分サーバー(アプリケーション)を必要があり、二つの例:
1.処理サーバーのパフォーマンスの差は、100 Aおよび50個のBのタスクが処理タスクを必要がありますサーバは、サーバBの二倍の性能を想定し、無キュー場合は、タスクは二つのサーバに均等に分割されます。サーバが同時に2つのタスクを処理しながら、私たちはただ、BのBサーバーの処理タスクを聞かせている場合、そのBは、圧力のいくつかを軽減することができます。
サーバの差分処理能力2.、サーバはAとBの両方がキューが設定されていない場合、タスクA、Bサーバは、タスクB(しないタスクまたはオブジェクトの処理方法)を扱うことができ、デフォルトが実行されるBを扱うことができると仮定されますエラーが発生したタスク、。ネガティブな思考は、サーバAとサーバBの共通インタフェース場合、サーバBは、メソッド・インターフェースを実装していない注射のインタフェースに実装される方法を介して、タスクキュー排他サーバA、サーバAを開始し、転送タスクの効果を達成するために。
WorkerCount
同時タスクの前の数を超える同時タスクの数は、の完了を待つことになる
同時タスク数のデフォルト値IO集約型のタスクは、多くの、より少ないCPUを集中的に使用するタスクであれば、あなたは同時タスクの数を増やすことを検討することができ、スレッド(CPU)の5倍です。
私はもちろん、あなたが開発するのを待っている他の設定パラメータがあり、上記で使用しました。
2.2アクセスの設定
実際の生産では、我々は誰もがアクセスパネルを持ちたい、または特定のタスクを一時停止し、その後、パネルを書き換えるための許可を必要としない場合があります。デフォルトでは、唯一のローカルアクセスはHangfireダッシュボードを使用する必要があります。だから、リモートアクセス用のコントロールパネルを書き換える必要があります。
var options = new DashboardOptions { Authorization = new[] { new HangfireAuthorizationFilter() } }; app.UseHangfireDashboard("/hangfire", options);
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter { //这里需要配置权限规则 public bool Authorize(DashboardContext context) { return true; } }
III。(使用公式文書を)
Fire-and-forget
実行すべきタスクキューにタスクに直接添加し、Delayed
現在時刻がタスクに追加された後の時間では、タスクキューに実行されるRecurring
定期的なタスクを、各タスクがサイクルに追加されますが、実行すべきタスクキューContinuations
名は、タスクが継続し、意味します
1.はじめに簡単です
using (var connection = JobStorage.Current.GetConnection())
{
var storageConnection = connection as JobStorageConnection; if (storageConnection != null) { //立即启动 var jobId = BackgroundJob.Enqueue(()=>Console.WriteLine("Fire-and-forget!")); } }
もちろん、単に静的な方法を行うことができ、Hangfireミッションは、依存性注入.NETのコアをサポートするためではない、それはオブジェクトを作成し、対応する方法を実行します。
BackgroundJob.Enqueue<SomeClass>(i => i.SomeMethod(someParams))
2.高度な機能
2.1タスクキューを設定します
[Queue("test")]
public void TestQueue() { }
あなたが特定のキューサーバの処理ということを指定することができるように非周期タスクの場合、単にタスクのパフォーマンスのキューの特性を追加します。
定期的なタスクは、あなたが宣言する必要があります:
RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"),Cron.Daily,queue:"test");
2.2を使用するログ・フィルター(私の見解を指します)
カスタムフィルタ用Hangfireサポートは、その上、作成、実行、実行、およびする状態で特定のタスクに特定のアクションを実行することができます。
//特定方法过滤器
[LogEverything]
public static void Send() { } //全局过滤器 GlobalJobFilters.Filters.Add(new LogEverythingAttribute());
IV。中国のドキュメント
hangfireは、優れたオープンソースコンポーネントのバックグラウンドタスク、ない中国の公式文書であるので、単純に、Googleの機械翻訳を使用してビットを変更します。
ます。https://github.com/jonechenug/Hangfire-Chinese-Docドキュメントはgithubのを扱います
ドッキングウィンドウを実行し、8080ローカルポートにアクセスします。
docker run --restart always --name hangfire -d -p 8080:80 daocloud.io/koukouge/hangfirezhdoc
I.説明
Hangfire高い人気とバックエンドの分散実行サービスを使いやすいように、複数のデータベースをサポートしています。.NETのコア環境では、内蔵のDIコアはNF4.Xに環境を構成する必要がなくなりライフサイクルを管理し、常に実行している、本当に箱から出して、トラブルを。
II。インストール
Hangfie公式サポートは、MSSQLとRedisのある、加えて、代替があるのPostgreSQLとモンゴ。
アプリケーションポータルでプロジェクトが参照する必要がHangfire.AspNetCoreや、MSSQLデータベースの使用など、永続的な固有のライブラリ、Hangfire.SqlServerを。
(そのようなプロジェクトBLL層のような)他のプロジェクトにしながら、単にの基礎参照Hangfire.Coreそれを。
三.Startup設定
1. Hnagfireサービスを埋めます
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
2.オプション
次のようにHangfireサービスと対応するウェブパネルを起動します。
app.UseHangfireServer();//启动Hangfire服务 app.UseHangfireDashboard();//启动hangfire面板
気配りの視聴者がより多くのコンフィギュレーションを提供することができ、これらの2つの方法がオプションのパラメータを持っているかもしれません。
2.1設定タスクのプロパティ
var jobOptions = new BackgroundJobServerOptions { Queues = new[] { "test","default" },//队列名称,只能为小写 WorkerCount = Environment.ProcessorCount * 5, //并发任务数 ServerName="hangfire1",//服务器名称 }; app.UseHangfireServer(jobOptions);
Queues
リストキューが処理されるように
データベースに接続された複数のサーバの場合は、Hangfireは、彼らが一部に分布していると思います。現実には、多くの場合、異なるサーバでの有意差は、この時間は処理キューの合理的な配分サーバー(アプリケーション)を必要があり、二つの例:
1.処理サーバーのパフォーマンスの差は、100 Aおよび50個のBのタスクが処理タスクを必要がありますサーバは、サーバBの二倍の性能を想定し、無キュー場合は、タスクは二つのサーバに均等に分割されます。サーバが同時に2つのタスクを処理しながら、私たちはただ、BのBサーバーの処理タスクを聞かせている場合、そのBは、圧力のいくつかを軽減することができます。
サーバの差分処理能力2.、サーバはAとBの両方がキューが設定されていない場合、タスクA、Bサーバは、タスクB(しないタスクまたはオブジェクトの処理方法)を扱うことができ、デフォルトが実行されるBを扱うことができると仮定されますエラーが発生したタスク、。ネガティブな思考は、サーバAとサーバBの共通インタフェース場合、サーバBは、メソッド・インターフェースを実装していない注射のインタフェースに実装される方法を介して、タスクキュー排他サーバA、サーバAを開始し、転送タスクの効果を達成するために。
WorkerCount
同時タスクの前の数を超える同時タスクの数は、の完了を待つことになる
同時タスク数のデフォルト値IO集約型のタスクは、多くの、より少ないCPUを集中的に使用するタスクであれば、あなたは同時タスクの数を増やすことを検討することができ、スレッド(CPU)の5倍です。
私はもちろん、あなたが開発するのを待っている他の設定パラメータがあり、上記で使用しました。
2.2アクセスの設定
実際の生産では、我々は誰もがアクセスパネルを持ちたい、または特定のタスクを一時停止し、その後、パネルを書き換えるための許可を必要としない場合があります。デフォルトでは、唯一のローカルアクセスはHangfireダッシュボードを使用する必要があります。だから、リモートアクセス用のコントロールパネルを書き換える必要があります。
var options = new DashboardOptions { Authorization = new[] { new HangfireAuthorizationFilter() } }; app.UseHangfireDashboard("/hangfire", options);
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter { //这里需要配置权限规则 public bool Authorize(DashboardContext context) { return true; } }
III。(使用公式文書を)
Fire-and-forget
実行すべきタスクキューにタスクに直接添加し、Delayed
現在時刻がタスクに追加された後の時間では、タスクキューに実行されるRecurring
定期的なタスクを、各タスクがサイクルに追加されますが、実行すべきタスクキューContinuations
名は、タスクが継続し、意味します
1.はじめに簡単です
using (var connection = JobStorage.Current.GetConnection())
{
var storageConnection = connection as JobStorageConnection; if (storageConnection != null) { //立即启动 var jobId = BackgroundJob.Enqueue(()=>Console.WriteLine("Fire-and-forget!")); } }
もちろん、単に静的な方法を行うことができ、Hangfireミッションは、依存性注入.NETのコアをサポートするためではない、それはオブジェクトを作成し、対応する方法を実行します。
BackgroundJob.Enqueue<SomeClass>(i => i.SomeMethod(someParams))
2.高度な機能
2.1タスクキューを設定します
[Queue("test")]
public void TestQueue() { }
あなたが特定のキューサーバの処理ということを指定することができるように非周期タスクの場合、単にタスクのパフォーマンスのキューの特性を追加します。
定期的なタスクは、あなたが宣言する必要があります:
RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"),Cron.Daily,queue:"test");
2.2を使用するログ・フィルター(私の見解を指します)
カスタムフィルタ用Hangfireサポートは、その上、作成、実行、実行、およびする状態で特定のタスクに特定のアクションを実行することができます。
//特定方法过滤器
[LogEverything]
public static void Send() { } //全局过滤器 GlobalJobFilters.Filters.Add(new LogEverythingAttribute());
IV。中国のドキュメント
hangfireは、優れたオープンソースコンポーネントのバックグラウンドタスク、ない中国の公式文書であるので、単純に、Googleの機械翻訳を使用してビットを変更します。
ます。https://github.com/jonechenug/Hangfire-Chinese-Docドキュメントはgithubのを扱います
ドッキングウィンドウを実行し、8080ローカルポートにアクセスします。
docker run --restart always --name hangfire -d -p 8080:80 daocloud.io/koukouge/hangfirezhdoc