高速学習-宿題の開発

宿題を立てる

このセクションでは、Javaやシェルを含む宿題を開発し、使い慣れたIDEをデバッグに使用する方法を紹介します。

ただし、ジョブが開発された後、実際に機能するには、そのジョブをエグゼキューターにデプロイする必要があることに注意してください。

デプロイ方法については、「Saturn Executorのデプロイ」のセクションを参照してください。

0 前置条件

Saturnコンソールがデプロイされていることを確認してください。そうでない場合は、「Saturnコンソールのデプロイ」セクションを参照してください。

1 Javaジョブを開発する

1.1 maven依存関係を追加する

pom.xmlに依存関係を追加する

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-job-api</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>  

そしてプラグイン

<plugin>
  <groupId>com.vip.saturn</groupId>
  <artifactId>saturn-plugin</artifactId>
  <!-- 版本与saturn-job-api一致 -->
  <version>master-SNAPSHOT</version>
</plugin>

1.2最初のJavaジョブを開発する

現在のクラスを変更するか、新しいクラスを追加し、AbstractSaturnJavaJobから継承してhandleJavaJobメソッドを実装します。

    public class DemoJob extends AbstractSaturnJavaJob {
    
    

    	@Override
    	public SaturnJobReturn handleJavaJob(final String jobName, final Integer shardItem, final String shardParam, final SaturnJobExecutionContext context) {
    
    
    	// do what you want here ...
              
    	// 返回一个SaturnJobReturn对象,默认返回码是200表示正常的返回
            		return new SaturnJobReturn("我是分片"+shardItem+"的处理结果");
	    }
    }

handleJavaJobメソッドは、ジョブ呼び出しの主要なエントリポイントであり、スケジュール期間が到来すると、Saturnがこのメソッドを呼び出します。

入力パラメーターは次のとおりです。

  • jobName:ジョブ名
  • shardItem:シャード番号(0から開始)シャードパラメーター(コンソールで構成)
  • shardParam:シャーディングパラメータ(コンソールで設定)
  • context:コンテキストを呼び出す

簡単な宿題を作成する方法だけを示して上記の。実際の宿題は、はるかに複雑である。が提供するいくつかのツールと方法AbstractSaturnJavaJobはあなたの作業負荷を減らすことができます。さらに多くのabstractSaturnJavaJobメソッドをチュートリアルで見ることができます。

JavaJobReturnについて

JavaJobReturnは、ジョブ結果の戻りをカプセル化したものです。次の3つのメンバー変数があります。

  • returnCode:結果コード。0は結果が成功したことを表し、残りの値は失敗を表します。デフォルトは0です。ユーザーは自分のビジネスに応じて戻り値を設定できますが、次の戻りコードは予約語であり、0、1、2、9999を含めて使用できないことに注意してください。
  • returnMsg:情報を返します。コンソールに表示されます。デフォルト値はありません。
  • errorGroup:例外コード。詳細については、チュートリアルを参照してください。

1.3 IDEでジョブをデバッグする

この手順により、IDEでエグゼキュータープロセスが開始されます。

1.3.1 Eclipse

プロジェクトを右クリック->実行/デバッグ->実行構成

ここに画像の説明を挿入

  • 名前空間:名前空間。名前空間は、ジョブをグループ化するために使用されます。ジョブは特定の名前空間に属している必要があります。同じ名前空間内のジョブ名を繰り返すことはできません。
  • executorName:実行ノードの一意の識別子

1.3.2 IntelliJ IDEA

ここに画像の説明を挿入

起動パラメータを追加します。

saturn:run -Dnamespace = www.abc.com -DexecutorName = exec01 -DVIP_SATURN_CONSOLE_URI = http://127.0.0.1:9088

パラメータの意味についてはセクション3.1を参照してください

1.4コンソールにJavaジョブを追加する

IDEがエグゼキューターを開始しても、対応するJavaジョブが追加されてコンソールで開始されるまで、ジョブは実行できません。

コンソールにJavaジョブを追加するには、ジョブ実装クラスは実装するJavaジョブのclassNameである必要があります。

ここに画像の説明を挿入

  • ジョブタイプ:JavaタイミングジョブとShellタイミングジョブに分かれています。ここでJavaタイミングジョブを選択してください
  • ジョブ名:ジョブID識別、名前空間の下で一意である必要があります
  • ジョブ実現クラス:完全パッケージ名+ジョブ実現クラスのクラス名
  • cron式:ジョブタイミング式
  • ジョブシャードの合計数:同時実行数を示します。2は、ジョブに2つのプロセスが同時に実行され、各プロセスに独自の特別なスクリプトとパラメーターがあることを意味します(これらのプロセスは異なるマシンで実行されている場合があります)。
  • シャードシーケンス番号/パラメーター比較表:各シャード実行の完全なスクリプトパスとパラメーターを定義します。これは土星の最も重要なパラメータの1つです。フラグメント番号は0から始まり、最大はフラグメントの総数-1です。
  • ジョブの説明情報(オプション):ジョブの説明

より高度な設定は、ジョブ編集ページで編集できます。

次に、このジョブを開始します

ここに画像の説明を挿入

すべてが正常であれば、IDEのコンソールにジョブ実行ログが表示され、[シャーディング]タブで実行結果を確認することもできます。(もちろん、ジョブは最後に実行されることが前提です)

以下は、成功した実行のログです。

[2017-12-13 15:09:45.206] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=Job echoJavaJob handle items: [0, 1]
[2017-12-13 15:09:45.206] [INFO] [Saturn-echoJavaJob-1-thread-1] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob,  jobClass is com.test.DemoJob 
[2017-12-13 15:09:45.207] [INFO] [Saturn-echoJavaJob-1-thread-3] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob,  jobClass is com.test.DemoJob 
[2017-12-13 15:09:45.207] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=echoJavaJob finished, totalCost=1, return={0=SaturnJobReturn [returnCode=0, returnMsg=我是分片0的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4882587783541623202, SATURN_PARENT_SPAN_ID=1611817686233844130}], 1=SaturnJobReturn [returnCode=0, returnMsg=我是分片1的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4418419319829081425, SATURN_PARENT_SPAN_ID=3024241466322103633}]}

これは、コンソールで表示される結果です。
ここに画像の説明を挿入

1.5パッケージ化と配備

上記の手順に問題がない場合は、ジョブがローカルで検証されていることを意味します。これでデプロイできます。

次のコマンドを実行してパッケージ化します

mvn saturn:zip

/ targetディレクトリに**-app.zip **の圧縮パッケージを取得します。導入ガイドに従って、圧縮パッケージをexecutorに導入します。

このステップを完了すると、ジョブが開発およびデバッグされます。パッケージ化されたジョブをExecutorにデプロイして実行する方法については、「Saturn Executorのデプロイ」のセクションを参照してください。

2 Shellジョブを開発する

シェルジョブは実際にはシェルスクリプトに限定されませんが、エグゼキューターが配置されているサーバー上で実行できるすべてのスクリプトおよびプログラムにすることもできます。スクリプト/プログラムの開発言語は限定されず、Python / Java / PHP / Rubyにすることができます。

具体的な原理を下図に示します。スケジューリング条件が満たされると、Saturn ExecutorはSystem.exec()を呼び出してスクリプト/プログラムを呼び出します。

ここに画像の説明を挿入

2.1最初のシェルジョブを開発する

シェルジョブ開発には2つの形式があります。

  • 簡単な開発:エグゼキューターにスクリプトを配置せずに、Saturnコンソールのテキストボックスに直接シェルスクリプトを記述します。この方法は、単純なスクリプトの実行に適しています
  • スクリプト開発:スクリプト/プログラムを特定のパスにデプロイしてから、Saturnコンソールでスクリプト実行パスを構成します

実際のニーズに応じて、新しいシェルジョブを作成する方法を選択します

2.1.1簡単な開発

まず、ホームページからデフォルトのドメイン(またはカスタムドメイン)を入力します
ここに画像の説明を挿入

次に、[追加]ボタンをクリックして新しい割り当てを追加します
ここに画像の説明を挿入

次に、シェルジョブを追加し、[シャーディングパラメータ]入力ボックスにシェルスクリプトを入力します。
ここに画像の説明を挿入

最後に「OK」をクリックして保存します

2.1.2スクリプト開発

シェルジョブを開発するためのスクリプトを選択することもできます。

最初にスクリプトを準備し、スクリプトのコンテンツである/ apps / shディレクトリ新しいdemojob.shスクリプトを作成します。

#/bin/sh
echo "hello world"

次に、スクリプトに実行権限を追加します。

chmod +x /apps/sh/demojob.sh

スクリプトの準備後にシェルジョブを追加する
ここに画像の説明を挿入

シャーディングパラメータの設定に注意してください。パラメータの値は、/ apps / sh / demojob.shスクリプトを実行するコマンドです。

最後に「OK」をクリックして保存します。

2.2エグゼキュータを起動する

ShellはMavenプラグインを使用してJavaのようにデバッグすることはできません。開発したスクリプトを検証するには、標準のExecutorパッケージをダウンロードして起動する必要があります。詳細については、Saturn Executor導入ガイドを参照してください

Shellジョブの場合、Executorの配置はJavaジョブの配置よりも簡単で、ダウンロードして解凍し、スクリプトの起動コマンドを実行するだけです。

2.3ジョブを開始する

エグゼキューターが開始されると、対応するシェルジョブがSaturnコンソールで開始されるまで、ジョブは自動的に実行されません。

ここに画像の説明を挿入

すべてが正常であれば、IDEのコンソールにジョブ実行ログが表示され、[シャーディング]タブで実行結果を確認することもできます。(もちろん、ジョブは最後に実行されることが前提です)

以下は、成功した実行のログです。

[2017-12-13 17:17:25.119] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.job.shell.ScriptJobRunner] >>> [echoShellJob] msg=echoShellJob-0: hello world

[2017-12-13 17:17:25.120] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.venus.util.HemersCounter] >>> msg=reported event to herms, type:SATURN.EXECUTOR.FOR.NABOO, title:Job item stop, jobName is echoShellJob, item is 0, msg:executorName is executor_001, domain is yfb-saturn-executor.vip.vip.com
[2017-12-13 17:17:25.120] [INFO] [executor_001_echoShellJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoShellJob] msg=echoShellJob finished, totalCost=24ms, return={0=SaturnJobReturn [returnCode=0, returnMsg=the exit value is 0, errorGroup=200, prop={}]}

これは、コンソールで表示される結果です。

ここに画像の説明を挿入

これまでのところ、最初のシェルジョブは正常に開発されました。

3春の統合

この機能はバージョン3.3.0以降でサポートされています。

デモプロジェクトsaturn-demo-springをダウンロード

3.2.1土星のばねに依存

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-spring</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

3.2.2 saturn.propertiesを構成する

クラスパスのルートディレクトリにsaturn.propertiesファイルを追加し、app.class構​​成を追加します。

app.class=com.vip.saturn.job.spring.GenericSpringSaturnApplication

GenericSpringSaturnApplicationを使用しClassPathXmlApplicationContextapplicationContext.xmlファイルをロードしてSpringを開始ます。

3.2.3カスタムスタートスプリング

  • Springをカスタマイズする目的を達成するためにGenericSpringSaturnApplication、サブクラスを作成し、そのメソッドを書き直して構成app.classすることができます。

  • 起動時に読み込まれるxmlファイルをカスタマイズする場合は、getConfigLocations()メソッドをオーバーライドできます

  • Springを完全にカスタムで起動する場合は、run()メソッドをオーバーライドできます

4 SpringBootを統合する

この機能はバージョン3.3.0以降でサポートされています。

デモプロジェクトsaturn-demo-springbootをダウンロード

4.2.1 saturn-springbootに依存

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-springboot</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

4.2.2 saturn.propertiesを設定する

クラスパスのルートディレクトリにsaturn.propertiesファイルを追加し、app.class構​​成を追加します。

app.class=com.vip.saturn.job.springboot.GenericSpringBootSaturnApplication

GenericSpringBootSaturnApplicationSpringApplication.run(source())SpringBootの起動に使用されます。

4.2.3 SpringBootのカスタム起動

  • SpringBootをカスタマイズする目的を達成するためにGenericSpringBootSaturnApplication、サブクラスを作成し、そのメソッドをオーバーライドしてapp.class、このクラスとして構成することができます。

  • 起動負荷のソースをカスタマイズする場合は、source()メソッドをオーバーライドできます

  • SpringBootを完全にカスタムで起動する場合は、run()メソッドをオーバーライドできます

5土星の埋め込み使用(非推奨)

Saturnの埋め込み使用、そのパッケージ化方法、動作モード、およびjvmパラメータの実行はすべてプロジェクトのメインフレームワーク(Spring、Tomcatなど)に依存しているため、Saturn ClassLoaderをビジネスClassLoaderから分離できず、ログの分離、パッケージの競合などが発生します。問題が発生し、Executorのワンキー再起動、自動アップグレード、その他の機能が失敗しました。したがって、埋め込みを使用することはお勧めしません。

ここでは、SpringまたはSpringBoot環境でのSaturnの組み込み使用法を紹介します。saturn-pluginプラグインは不要になりました。SaturnExecutorの開始または停止は、Springの開始または停止に依存します。

この機能はバージョン3.3.0以降でサポートされています。

デモプロジェクトをダウンロードするsaturn-demo-springboot-embedded

5.2.1 saturn-embed-springに依存

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-embed-spring</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

5.2.2 EmbeddedSpringSaturnApplicationの登録

@Bean
public EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication() {
    
    
  EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication = new EmbeddedSpringSaturnApplication();
  embeddedSpringSaturnApplication.setIgnoreExceptions(false);
  return embeddedSpringSaturnApplication;
}

上記の例はSpringBoot環境での登録ですが、Spring環境を利用している場合は、xmlを設定することでBeanを登録できます。

EmbeddedSpringSaturnApplicationSpringコンテナのContextRefreshedEventイベントは監視されてSaturn Executorを開始し、ContextClosedEventイベントは監視されてSaturn Executorを適切に停止します。

このうちsetIgnoreExceptions()、メソッドが設定されているtrue場合、エグゼキューターが開始または停止されたときに例外が発生すると、警告ログのみが出力され、例外falseはスローされず、Springコンテナーの操作には影響しません。設定されている場合、ログだけでなく例外もスローされ、影響しますSpringコンテナの開始と停止。

おすすめ

転載: blog.csdn.net/weixin_42528266/article/details/108603334