En los sistemas distribuidos, para garantizar una fuerte consistencia de las transacciones distribuidas de datos, al llamar a la interfaz RPC o enviar MQ, tomará una operación de reintento para evitar el tiempo de espera de la solicitud de jitter de red. La forma más común de volver a intentarlo es MQ, pero si no introduce MQ en su proyecto, será inconveniente. Este artículo presenta principalmente cómo usar el reintento de primavera para implementar operaciones de reintento.
1. Agregue dependencias maven
<Spendency> <MoupRoMID> org.springframework.rcryry </groupid> <artifactId> spring-retry </artifactid> <versión> 1.1.2.release </versión> </pendency> <ependency> <proupId> org.aspectj </groupid> <artifactid> aspecto </artifactid> <verserse> 1.5.4 </versión> </votor> </artifactID>
2. Agregue la configuración de reintento en el inicio
@SpringBootApplication @Enableretry Public Class Application {public static void main (string [] args) {springApplication.run (application.class, args); }} 3. Servicio de escritura
@Service public class RemoteService {private static final logger logger = loggerFactory.getLogger (testController.class); @Cryryable (value = {BusinessException.class}, maxattempts = 3, backoff = @backoff (demora = 5000l, multiplicador = 2)) public void llamado () lanza la excepción {logger.info ("hacer algo ..."); arrojar una nueva BusinessException ("Excepción de llamadas RPC"); } @Recover public void recover(BusinessException e) { logger.info(" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Controlador de escritura
@RestController @RequestMapping ("/Test") Public Class TestController {private static final logger logger = loggerFactory.getLogger (testController.class); @Autowired Private Remoteservice RemoteService; @RequestMapping ("/test") public String login () lanza la excepción {remotaService.call (); return string.ValueOf ("11"); } 5. Visite http: // localhost: 8080/prueba/prueba
6. Registro de prueba
2017-07-25 19:28:07 [Info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remotaService.java:19)] Haz algo ...
2017-07-25 19:28:12 [Info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remotaService.java:19)] haz algo ...
2017-07-25 19:28:22 [Info]-[http-nio-53602-eexec-1]-[com.test.retry.service.remoteservice.call (remotaService.java:19)] haz algo ...
2017-07-25 19:28:22 [INFO]-[http-nio-53602-EXEC-1]-[com.test.retry.service.remoteservice.rocover (remotaService.java:24)]] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-07-25 19:28:22 [INFO]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.rocover (remotaService.java:25)] RPC CALLE
7. Instrucciones de configuración relacionadas
@Enableretry ¿Puedes intentarlo de nuevo ? Cuando la propiedad ProxyTargetClass sea verdadera, use el proxy CGLIB. Las anotaciones de Java estándar se utilizan de forma predeterminada. En Spring Boot, este parámetro se puede escribir en la entrada del programa.
@Pryable El método para etiquetar esta anotación se volverá a intentar cuando ocurra una excepción
Valor: especifique la clase de excepción que se procesará
Incluir: La clase de excepción especificada manejada es la misma que el valor, y el valor predeterminado está vacío. Cuando la exclusión también está vacía, todas las excepciones están predeterminadas para ser todas
Excluir: Especifique que las excepciones no se procesen, el valor predeterminado está vacío, cuando la inclusión también está vacía, predeterminada todas las excepciones
Maxattempts: número máximo de reintentos. Predeterminado 3 veces
Backoff: Vuelva a intentar la política de espera. Use la anotación de @backoff por defecto
@Backoff Vuelve a reí la Política de espera <Br /> Cuando los parámetros no están configurados, FixedBackOffPolicy se usa de forma predeterminada (especifique el tiempo de espera) y Retinting espera 1000MS
Establezca retraso, use fixbackoffpolicy (especifique el tiempo de espera) e intente el tiempo de espera para ser completado nuevamente
Al establecer el retraso y MaxDealy, intente nuevamente y espere la distribución homogénea entre estos dos valores
Establecer retraso, maxdealy y multiplicador, use exponencialBackOffPolicy (implementación del intervalo de reintento exponencial), el multiplicador especifica el retraso múltiple, como el retraso = 5000l, el multiplicador = 2, el primer reintento es de 5 segundos, la segunda vez es 10 segundos, y el tercer tiempo es de 20 segundos ...
@Recover se usa para el método de reintento fallido de @Retryable. Los parámetros del método de esta anotación deben ser una excepción lanzada por @cryryable, de lo contrario no se reconocerá. El procesamiento de registro se puede realizar en este método.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.