java - 一个项目在集群中运行,如何让定时任务只运行一次?
黄舟
黄舟 2017-04-18 10:32:05
0
8
1131

一个项目在集群中运行,如何让定时任务只运行一次?不加限制就会导致重复计算的问题。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(8)
洪涛

Java の場合は、quartz を使用することをお勧めします。
1. Quatz は、スケジュールされたさまざまなタスクを実行するのに非常に便利です。
2. クラスターをサポートすることにより、同じタスクがデータベース テーブルを通じてのみ実行されます。

いいねを押す +0
左手右手慢动作

最も単純な方法で使用すると仮定すると、quartz、コードを変更し、ジョブ ロジックにロックを取得する操作を追加する必要があります。このロックはデータベースで使用できます。具体的な方法は次のとおりです。ビジネス上重要なレコードをキーとして実行し、クラスター内で同じジョブの挿入が成功するのは 1 回だけです。これは、ロックが取得されて実行できることを意味します。それ以外の場合、ジョブは実行されずに終了します。

いいねを押す +0
Ty80

JDBC-JobStore を使用してクラスタリングを構成する

Quartz のクラスタリング機能は、フェイルオーバーおよびロード バランシング機能を通じてスケジューラに高可用性とスケーラビリティの両方をもたらします。

quartz 自体はクラスタリング、フォールトトレランス、ロードバランシングをサポートしています。これはコードを変更することなく実現できます。

いいねを押す +0
巴扎黑

quartzフレームワークはクラスタリングをサポートします

いいねを押す +0
左手右手慢动作

スケジュールされたタスクのトリガー、メッセージのサブスクリプションと消費を具体的に管理するミドルウェア システムを作成できます。時間がトリガーされると、メッセージが送信され、クラスター システムがこのメッセージをサブスクライブします。メッセージはクラスター内の任意のマシンにランダムに配信できます。

いいねを押す +0
左手右手慢动作

マシンが計時を開始すると、他のマシンにメッセージをブロードキャストする必要があります。ただし、各マシンの時間間隔が問題です。メッセージが送信される前に、すべてのマシンが定期的にオンになります...

いいねを押す +0
阿神
  1. zookeeper、redis などを使用して、スケジュールされたタスクの実行ステータスやその他の情報を手動で保存し、タスクが 1 回だけ実行されるようにします。

  2. スケジュールされたタスクを別のプロジェクト (単一マシン上で実行) に抽出しますが、タスクの特定の内容はリモート呼び出し (dubbo、mq など) を通じて特定の分散サービスを呼び出します。つまり、スケジュールされたタスクはタスクのトリガーのみに単独で使用され、特定のタスクは分散して実行されます。

  3. Uncode-Schedule などのさまざまな分散タスク スケジューリング システムを使用する

いいねを押す +0
Ty80

私はそれを取り出してスタンドアロンのプログラムを作ることが多いです

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート