@Retryable (mecanismo de reintento del resorte)

Introducción

En el trabajo real, el reprocesamiento es un escenario muy común, como por ejemplo:

  • No se pudo enviar el mensaje.
  • No se pudo llamar al servicio remoto.
  • No se pudo competir por el bloqueo.

Estos errores pueden deberse a fluctuaciones de la red. Espere y luego vuelva a procesarlos exitosamente. En términos generales, se utilizan try/catch, while loop y otras sintaxis para el reprocesamiento, pero este método carece de uniformidad y no es muy conveniente, ya que requiere escribir mucho más código. Sin embargo, spring-retry puede implementar elegantemente la función de reprocesamiento mediante anotaciones sin invadir el código de lógica empresarial original.

¿Qué es @Retryable?

spring-retry de la familia spring es otro módulo de utilidad que nos ayuda a manejar los reintentos de cualquier operación específica de forma estándar. En el reintento de primavera, todas las configuraciones se basan en anotaciones simples.

@Retryable es una anotación reintentable proporcionada por Spring. Para utilizar el mecanismo de reintento proporcionado por Spring, debe hacer lo siguiente:

1. Agregue las dependencias correspondientes en el archivo pom.

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

2. Agregue la anotación @EnableRetry a la clase de inicio o a la clase donde se encuentra el método.

3. Agregue la anotación @Retryable al método que debe volver a intentarse. El ejemplo es el siguiente:

@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;
}

Descripción del parámetro en la anotación @Retryable:

  • maxAttempts: el número máximo de reintentos, el valor predeterminado es 3, si el número de reintentos que se configurará es 3, no es necesario escribirlo;
  • valor: la excepción especificada se generará antes de volver a intentarlo.
  • incluir: Al igual que el valor, por defecto está vacío. Cuando excluir también está vacío, por defecto es una excepción.
  • excluir: Especificar excepciones que no se manejarán
  • backoff: reintente la estrategia de espera, @Backoff se usa de forma predeterminada, el valor de @Backoff por defecto es 1000L y lo configuramos en 2000L.

Descripción del parámetro en la anotación @Backoff:

  • valor: cuántos milisegundos esperar antes de volver a intentarlo, el valor predeterminado es 1000L, lo configuramos en 3000L;
  • retraso: igual que el valor, pero por defecto es 0;
  • El multiplicador (múltiplo de retraso especificado) por defecto es 0, lo que significa una pausa fija de 1 segundo antes de volver a intentarlo. Si el multiplicador se establece en 1,5, el primer reintento será de 2 segundos, el segundo reintento será de 3 segundos y el tercer reintento serán 4,5 segundos. .

4. Puede marcar @Recover en el método especificado para habilitar el método llamado después de que falla el reintento (tenga en cuenta que debe estar en la misma clase que el método de reprocesamiento)

@Recover: cuando los reintentos alcancen el número de veces especificado, se volverá a llamar al método anotado y se podrá realizar el procesamiento de registros en este método. Cabe señalar que la devolución de llamada solo se producirá cuando la excepción que se produzca sea coherente con el tipo de parámetro de entrada.

Artículo anterior: Explicación detallada del uso de Async

Supongo que te gusta

Origin blog.csdn.net/weixin_43811057/article/details/131759900
Recomendado
Clasificación