Introducción
A veces, el cliente necesita volver a intentar cuando el servidor de configuración no responde para darle tiempo al servidor de configuración para recuperarse. Usando el componente de reintento proporcionado por Spring, podemos configurar fácilmente el mecanismo de reintento, incluido el intervalo de reintento, el número de tiempos de requisito, etc. No diré mucho más abajo, echemos un vistazo a la introducción detallada juntos.
Código fuente del proyecto
Haga clic para descargar
Agregar dependencias para proyectos web
Para habilitar la función de reintento del cliente, dos nuevas dependencias, la retrería de primavera y el spring-boot-starter-AOP, agregue el siguiente código al archivo pom.xml del proyecto web:
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>
Luego agregue la siguiente configuración en el archivo bootstrap.yml:
Primavera: Aplicación: Nombre: Web-Client Cloud: Config: Uri: http: // localhost: 8888 fast-fast: verdadero reintento: intervalo inicial: 1000 máximo-astempiones: 6 intervalo máximo: 2000 múltiple: 1.1
Primero, deje que Spring.Cloud.Config.Fail-Fast sea verdadero, es decir, si no se puede obtener la configuración remota, fallará de inmediato, pero vuelva a intentarlo con la siguiente configuración.
spring.cloud.config.retry Todos los niños son valores predeterminados:
prueba
Si usamos el proyecto en este tutorial, primero debemos iniciar el proyecto ConfigServer, luego iniciar el proyecto de registro e iniciar Eureka, porque el cliente web usa el servicio Eureka, luego cierre el ConfigServer y luego inicie el proyecto web. Veremos el siguiente registro:
2018-05-15 16: 04: 58.421 Información 2663 --- [principal] CCCCONFIGServicePropertySourcelocator: RECUSHA CONFIG DEL SERVER AT: http: // Localhost: 8888
Después de 6 fallas de reintento, el cliente no se inicia. Si configServer está habilitado a mitad de camino, el cliente web comienza con éxito.
Reintento de control de grano fino
Podemos implementar un mecanismo de reintento de control más granular en el código, crear una nueva clase de Java CN.ZXUQIAN.Configurations.RetryConfiguration en el proyecto web y agregue el siguiente código:
paquete cn.zxuqian.configurations; import org.slf4j.logger; import org.slf4j.loggerFactory; importar org.springframework.boot.autoconfigure.condition.conditionAlonMissingBean; importar org.springframework.context.context.bean; importación; importación; importación; importación; importación; importación; org.springframework.rcry.interceptor.rcryinterceptorBuilder; import org.springframework.retry.interceptor.rcryoperationsinterceptor; public class retryconfiguration {private static logger log = loggerFactory.getLogger (retryconfiguration.class); @Bean @ConditionAlonMissingBean (name = "configServerRryInterceptor") public retryoperationsInterceptor CONFIGSERVERRYRINITERCORTOR () {log.info (String.Format ("configServerryinterceptore: cambiando backoffoptions" + "a inicial: %s, múltiple: %s, maxinterval: %s", 1000, 1000, 1.2, 5000); return retryinterceptorBuilder .stateless () .backOffOptions (1000, 1.2, 5000) .maxattempts (10) .Build (); }} Aquí definimos el método ConfigServerRryinterceptor para el reintento de primavera utilizando nuestro interceptor de reintento personalizado. Métodos Use RetryinterceptorBuilder para crear un RetryOperations Interceptor sin apátrico según sea necesario, y establezca el intervalo de reintento inicial en 1000 milisegundos, el aumento múltiple es 1.2 veces, el intervalo de reintento máximo es de 5000 milisegundos, y el máximo de repetición es 10 veces. El constructor también proporciona interfaces como la configuración del mecanismo de reintento, que los lectores interesados pueden estudiar por su cuenta.
@ConditionAlonMissingBean indica que este bean coincide cuando no hay bean llamado configServerryInterceptor en el beanfactory.
Finalmente, en SRC/Main/Resources/Meta-Inf/(no se puede crear una carpeta) cree un nuevo archivo Spring.Factories, especificando que acabamos de crear la clase como la configuración al inicio, de modo que surge antes de obtener la configuración remota:
org.springframework.cloud.bootstrap.bootstrapconfiguration = cn.zxuqian.configurations.rcryconfiguration
prueba
Finalmente, inicie el proyecto web bajo la condición de cerrar ConfigServer, y luego verá que el proyecto comienza a fallar después de diez vueltos.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.