まず、導入された分散タスクスケジューリングプラットフォームのタイミング
中小企業のプロジェクトタスクと、同じサーバーで同じJVMに格納されたコードのタイミングは、大企業が定期的なタスクとビジネス・コード・サーバーを実行する別個の独立したJVMです。次の正規の作業は、学習を分散しました!
従来の定期的なタスク、訪問:接続
1.1伝統的な定期的なタスクを熟考問題
これは従来の問題点(1)タイミングタスク?
ダウンタイム、エラー、高い同時実行
非常に同時、その後、どのように対処するのジョブサーバーのダウンタイムで(2)の結果?
ハートビート監視、自動再起動を検出します。
ジョブが完了かどうかを確認するために小さなマークを作るために、各タスクを実行するために補償する場合を完了しなかったことを、補償機構を使用して、補償機構に完了していません。
(3)中心が急に対処する方法を、次に、与えられたときにコードを実行するタスクのタイミング?
エラー、エラーログの実装の一部を放棄、継続してスキップ
(4)場合のタイミングタスク・サーバーは、高い同時実行考える必要がありますか?
私たちは、シーンが発生しますしながら、シナリオが高い同時実行、高並行性を必要としない間隔、高並行性を検討する必要があります
1.2、XXL JOB実装原理
クォーツは、実際に分散ジョブの実装パッケージのための基盤となるフレームワークです
1.3、定期的なタスクのためのソリューションを分散
①使用することは、分散ロックを実装するのZooKeeper - 一時的な欠点を作成するためには、ノードおよびイベント通知は、拡張することは容易ではないということです
②スイッチを作るために、構成ファイルを使用して - 再起動の欠点が解除され、必要
唯一の制約データベース③ - 欠点は、効率が低いことです
④使用分散スケジューリングプラットフォーム XXL-JOB、Elastric-ジョブ(依存ZK)、TBSchedule
1.4、XXL-JOB導入された機能
XXL-JOBのGitHubのアドレスします。https://github.com/xuxueli/xxl-job
開発ドキュメント:接続
主な特長:スレッドプールがトリガーアラームメッセージ、状態監視、障害処理、サブタスクの依存関係、実行ログマルチスレッド
ここでは、公式ウェブサイトの一部の機能は次のとおりです:
(1)シンプル:1分を開始します。でサポートされている(特別ページ)WebページタスクCRUD操作上、
(2)動的:支持動的修正タスクの状態、一時停止/即効とタスク、およびタスクの終了を再開する。
(3)派遣センターHA(中心):スケジューリング中央設計を使用して、「コントロールセンター」クォーツベースのクラスタ。
(4)タスクフェイルオーバークラスタ展開アクチュエータ、遷移をスムーズ「フェイルオーバー」タスクポリシー選択をルーティングするであろうアクチュエータスケジューリングが失敗した場合、フェイルオーバー。
(5)一貫性:による「コントロールセンター」データベースロッククラスター分散スケジューリングの一貫性を確保するためには、タスクのスケジューリングは、最初のパフォーマンス一旦トリガされます。
(6)カスタムタスクパラメータ:タスクスケジューリングサポート即効性へのオンライン設定パラメータ;
(7)スレッドプールのスケジューリング:スケジューリングシステムマルチスレッドトリガー実行するようにスケジュール。
(8)弾性膨張容積減少:マシンがオンラインまたはオフライン新しい実行すると、タスクは次のスケジューリングを再割り当てします。
(9)電子メール警告:電子メールサポートのミッション障害アラーム、サポートバルク電子メール警告を設定し、複数の電子メールアドレス。
(10)ステータス監視:リアルタイムタスクの進捗状況を監視します。
(11)実行ログ:サポートは、オンラインスケジューリング結果を表示し、リアルタイムのサポートはモードローリングアクチュエータ出力の完全な実行ログを表示します。
(12)データの暗号化:データ暗号化のためのコントロールセンターとアクチュエータとの間の通信、スケジューリング情報セキュリティを強化します。
(13)に依存するタスク: サポート設定サブタスクの依存関係、親タスクの実行およびイニシアチブの成功した実行の終了後に、カンマで区切られたサブタスク、複数のサブタスクの実行をトリガします。
中央リポジトリMavenの(14)プッシュ:最新の安定バージョンはMavenの中央リポジトリ、ユーザアクセスおよび使用をプッシュします。
(15)タスク登録する:エグゼキュータ定期的に自動的に登録されたタスクを、ディスパッチ・センタは、タスクの実行を見つけ、トリガ自動的に登録されます。また、手動入力アクチュエータのアドレスをサポートしています。
(16)戦略ルーティング:備えた豊富なルーティングポリシークラスタの展開アクチュエータ提供:最も頻繁に使用しないでください、最初、最後、ポーリング、ランダム、一貫性のHASHを、最低使用フェイルオーバー、忙しい転送をように。
(17)レポートを実行します。そのようなタスク、スケジュール回、アクチュエータの数の数としてビューリアルタイム・パフォーマンス・データ、;および発送日付マップなどのスケジュールレポート、マッピングし、他のスケジューリング成功。
(18)スクリプトタスク:GLUEモードの開発を支援し、シェル、Pythonとスクリプトの他のタイプを含む、スクリプトタスクを実行します。
スケジューリング処理戦略があまりにも密処理を実行するために遅すぎるとき、戦略は、次のとおりです:処理ポリシーのブロッキング(19)単一のシリアル(デフォルト)、廃棄以降のスケジュール、スケジュールを上書きする前に、
(20)政策を扱う故障、失敗時の取り扱い戦略スケジューリングポリシーを含む:障害アラーム(デフォルト)、故障の再試行。
(21)スライス放送タスク:アクチュエータクラスタ配備、ポリシー次のような状況を「スライスが放送」タスク選択ルーティング、タスクスケジューラは断片パラメータを渡しながら、全てのアクチュエータは、タスクを実行するクラスタに対応する放送をトリガする。CANタスクに応じて開発されたフラグメントのフラグメント・パラメータ。
(22)動的フラグメント:ディメンション断片としてアクチュエータに断片放送タスクは、動的フラグメント、共同ビジネスプロセスの数を増やす動的膨張アクチュエータクラスタをサポートし、データトラフィック動作の大容量が大幅に作業を改善するために行われます処理能力とスピード。
(23)イベントトリガー:「クーロンの道」と「タスク依存的」トリガー任務に加えて、イベントベースのトリガモードのタスクをサポートします。発送センターがトリガされたサービスに単一のタスクを実行するためのAPIを提供し、トリガーは、ビジネスイベントに応じて柔軟にすることができます。
(24)サポートジョブのクラスタ
(25)動的構成タイミングルール(伝統的なタイミングルールがデッド書かれています)
二、SpringBoot統合XXL、仕事
2.1、手順を使用します
- (1)登録センターとしてXXLジョブ管理者(ジョブ実際の実行サーバのアドレス)で実行を作成します
- (2)クラスタをサポートすることができるXXLジョブ管理者にアクチュエータ(スケジューリング特定アドレス)を作成します
- (3)ジョブサーバのコードでは、クラスはJobhandlerジョブの実行方法を使用して表されています
- (4)を実行するタスクがある場合は、XXL-ジョブ管理プラットフォームで実行するために最初は、エグゼキュータのタスクを取得します
- プロファイルはXXLジョブレジストリのアドレスを入力する必要があります
- 接続ポート番号ネッティーを確立するために、各特定のジョブ実行サーバ
- 私たちは、仕事のコンテナにIJobHandler抽象クラスの登録を統合し、ジョブタスクのクラスを実行する必要があります
- 特定のジョブ・タスクを準備する方法を実行して、
2.2、Mavenの依存情報
少しはgithubのを見つけるようにすることができます
2.3、プロファイル情報application.properties
# web port
server.port=8081
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job executor address
xxl.job.executor.appname=app-itmayiedu
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job, access token
xxl.job.accessToken=
### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1
2.3、コンフィギュレーションXxlJobConfig
@Configuration
@ComponentScan(basePackages = "com.xxl.job.executor.service.jobhandler")
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(adminAddresses);
xxlJobExecutor.setAppName(appName);
xxlJobExecutor.setIp(ip);
xxlJobExecutor.setPort(port);
xxlJobExecutor.setAccessToken(accessToken);
xxlJobExecutor.setLogPath(logPath);
xxlJobExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobExecutor;
}
}
2.3、ハンドラ・インタフェースを作成します
//只要类上加@JobHandler都会注册到XXL-Job执行器容器中
@JobHandler("demoJobHandler")
@Component
public class DemoHandler extends IJobHandler {
@Value("${server.port}")
private String serverPort;
@Override
public ReturnT<String> execute(String param) throws Exception {
System.out.println("######端口号:serverPort" + serverPort + "###定时Job开始执行啦!!!!######");
return SUCCESS;
}
}
2.4、SpringBootスタートアップクラス
わずかに