spring bootは@Retryableを使って再処理します。
前言
いつ再処理が必要ですか?
実際の仕事では、リピート処理はよく見られます。例えば、メッセージの送信失敗、リモートサービスの呼び出し失敗、ロックの奪い合い失敗など、これらのエラーは、ネットワークの変動によるものかもしれません。待ってから処理を再開することができます。通常は、try/catch、whileループなどの文法で再処理されますが、このようなやり方は統一性に欠けています。多くのコードを書く必要がありますが、spring-retryは、既存のビジネスロジックコードに侵入しないように、優雅に再処理機能を実現します。
考え方
@Retryableと@Recoverを使って再処理を実現し、再処理が失われた後のコールバックを実現します。
実現する
1.pom参照
….その他のコメント
単spring bootの応用を実証しましたが、その後のcloudシーンでは、例えば、zul、などのコンポーネントが再処理に関連しています。次の章で説明します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
いつ再処理が必要ですか?
実際の仕事では、リピート処理はよく見られます。例えば、メッセージの送信失敗、リモートサービスの呼び出し失敗、ロックの奪い合い失敗など、これらのエラーは、ネットワークの変動によるものかもしれません。待ってから処理を再開することができます。通常は、try/catch、whileループなどの文法で再処理されますが、このようなやり方は統一性に欠けています。多くのコードを書く必要がありますが、spring-retryは、既存のビジネスロジックコードに侵入しないように、優雅に再処理機能を実現します。
考え方
@Retryableと@Recoverを使って再処理を実現し、再処理が失われた後のコールバックを実現します。
実現する
1.pom参照
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
2.アプリケーション起動クラスのオープンretry….その他のコメント
@EnableRetry
public class BaseApplication {
.......
}
3.指定方法に@Retryableをマークして再試験を開く
@Retryable(value={A .class,B .class},
maxAttempts= ,
backoff = @Backoff(value = ))
public Integer retry() {
LOGGER.info(" retry");
final int a = 5;
int num = new SecureRandom().nextInt();
if (num % a == 0) {
return num;
}
throw new RetryException(" ");
}
4.指定方法に@Recoverをマークして再試行失敗後に呼び出す方法(注重処理方法と同じクラスにする必要があります。)
@Recover
public void recover(A e) {
// ... do something
}
@Recover
public void recover(B e) {
// ... do something
}
終了単spring bootの応用を実証しましたが、その後のcloudシーンでは、例えば、zul、などのコンポーネントが再処理に関連しています。次の章で説明します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。