@Retryable(스프링의 재시도 메커니즘)

소개

실제 작업에서 재처리는 다음과 같은 매우 일반적인 시나리오입니다.

  • 메시지를 보내지 못했습니다.
  • 원격 서비스를 호출하지 못했습니다.
  • 잠금 경쟁에 실패했습니다.

이러한 오류는 네트워크 변동으로 인해 발생할 수 있습니다. 잠시 기다렸다가 다시 처리하세요. 일반적으로 재처리에는 try/catch, while 루프 및 기타 구문을 사용하지만 이 방법은 일관성이 부족하고 편리하지 않으며 훨씬 더 많은 코드를 작성해야 합니다. 그러나 spring-retry는 원래 비즈니스 로직 코드를 침해하지 않고 주석을 통해 재처리 기능을 우아하게 구현할 수 있습니다.

@Retryable이란 무엇입니까?

spring 제품군의 spring-retry는 표준 방식으로 특정 작업의 재시도를 처리하는 데 도움이 되는 또 다른 유틸리티 모듈입니다. spring-retry에서는 모든 구성이 간단한 주석을 기반으로 합니다.

@Retryable은 Spring에서 제공하는 재시도 가능 주석으로, Spring에서 제공하는 재시도 메커니즘을 사용하려면 다음을 수행해야 합니다.

1. pom 파일에 해당 종속성을 추가합니다.

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

2. 시작 클래스 또는 메서드가 있는 클래스에 @EnableRetry 주석을 추가합니다.

3. 재시도해야 하는 메소드에 @Retryable 주석을 추가합니다.예는 다음과 같습니다.

@Retryable(maxAttempts = 3, backoff = @Backoff(value = 3000, multiplier = 1.5))
public Customer getCustomer(String customerId) {
    
    
		if (true) {
    
    
			JSONArray data = retObj.getJSONArray("data");
			if (data != null && !data.isEmpty()) {
    
    
				return data.toJavaList(Customer.class).get(0);
			}
		} else {
    
    
			log.error("异常,{}", customerId);
			throw new RuntimeException("获数据失败");
		}
		return null;
}

@Retryable 주석의 매개변수 설명:

  • maxAttempts: 최대 재시도 횟수, 기본값은 3입니다. 설정할 재시도 횟수가 3인 경우 작성할 필요가 없습니다.
  • 값: 재시도 전에 지정된 예외가 발생합니다.
  • include: 값과 마찬가지로 기본값은 비어 있고, 제외도 비어 있으면 기본값은 예외입니다.
  • 제외: 처리하지 않을 예외를 지정합니다.
  • backoff: 재시도 대기 전략으로 @Backoff가 기본으로 사용되며, @Backoff의 기본값은 1000L이며, 우리는 2000L로 설정했습니다.

@Backoff 주석의 매개변수 설명:

  • 값: 재시도하기 전에 기다려야 하는 시간(밀리초), 기본값은 1000L이며 3000L로 설정합니다.
  • 지연: 값과 동일하지만 기본값은 0입니다.
  • 승수(지정된 지연 배수)의 기본값은 0으로, 이는 재시도 전 1초의 고정 일시 중지를 의미합니다. 승수를 1.5로 설정하면 첫 번째 재시도는 2초, 두 번째 재시도는 3초, 세 번째 재시도가 됩니다. 4.5초가 됩니다..

4. 지정된 메서드에 @Recover를 표시하여 재시도 실패 후 호출되는 메서드를 활성화할 수 있습니다. (재처리 메서드와 동일한 클래스에 있어야 합니다.)

@Recover: 재시도 횟수가 지정된 횟수에 도달하면 주석이 달린 메소드가 콜백되고 이 메소드에서 로그 처리가 수행될 수 있습니다. 콜백은 발생하는 예외가 입력 매개변수 유형과 일치하는 경우에만 발생한다는 점에 유의해야 합니다.

이전 기사: 비동기 사용법에 대한 자세한 설명

Guess you like

Origin blog.csdn.net/weixin_43811057/article/details/131759900