Introduction
Parfois, le client doit réessayer lorsque le serveur de configuration ne répond pas à donner au serveur Config le temps de récupérer. En utilisant le composant RETRY fourni par Spring, nous pouvons facilement configurer le mécanisme de réessayer, y compris l'intervalle de réessayer, le nombre de temps de réessayer, etc. Je ne dirai pas beaucoup ci-dessous, jetons un coup d'œil à l'introduction détaillée ensemble.
Code source du projet
Cliquez pour télécharger
Ajouter des dépendances pour les projets Web
Pour activer la fonction de réessayer client, deux nouvelles dépendances, Spring-Retry et Spring-Boot-Starter-AOP, ajoutez le code suivant au fichier pom.xml du projet Web:
<dependency> <proupId> org.springframework.retry </proupId> <ArtifactId> Spring-retry </ artifactid> <version> 1.2.2.release </DERVIERSE> </DENDENCENCE> <Dendency> <ProupId> Org.SpringFramework.boot </proupId> <pretifactid> Spring-Boot-starter-aop
Ajoutez ensuite la configuration suivante dans le fichier bootstrap.yml:
Spring: Application: Nom: Web-Client Cloud: Config: URI: http: // localhost: 8888 FAIL-FAST: True Retry: Initial-Interval: 1000 MAX-ATTENTTT des tentatives: 6 max-interval: 2000 Multiple: 1.1
Tout d'abord, laissez Spring.cloud.config.fail-Faste être vrai, c'est-à-dire, si la configuration distante ne peut pas être obtenue, elle échouera immédiatement, mais réessayez avec la configuration suivante.
printemps.cloud.config.retry Tous les enfants sont des valeurs par défaut:
test
Si nous utilisons le projet dans ce didacticiel, nous devons d'abord démarrer le projet Configserver, puis démarrer le projet Registry et démarrer Eureka, car le client Web utilise le service Eureka, puis fermez le configterver, puis démarrez le projet Web. Nous verrons le journal suivant:
2018-05-15 16: 04: 58.421 Info 2663 --- [Main] CCCConfigServicePropertySourcelocator: Fetching Config à partir du serveur à: http: // localhost: 8888
Après 6 échecs de réessayer, le client ne commence pas. Si Configserver est activé à mi-chemin, le client Web commence avec succès.
Retry de contrôle à grains fins
Nous pouvons implémenter un mécanisme de réchauffement de contrôle plus granulaire dans le code, créer une nouvelle classe Java CN.zxuqian.configurations.retryConfiguration dans le projet Web et ajouter le code suivant:
package cn.zxuqian.configurations; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.boot.autoconfigure.condition.conditionalonMissingBean; import org.springframework.contex org.springframework.retry.interceptor.retryInterceptorBuilder; import org.springframework.retry.interceptor.retryOpersInterceptor; public class reryconfiguration {private static logger log = loggerfactory.getLogger (retryconfiguration.class); @Bean @conditionalonMissingBean (name = "ConfigServerRetryInterceptor") Retryoperations Interceptor ConfigServerRentryInterceptor () {Log.info (String.format ("ConfigSerververInterceptor: Modification des backoffoptions" + "à initial:% s, multiple:% s, maxinterval:% s", 1000, 1.2, 5000); return retryInterceptorBuilder .Stateless () .BackOffoPtions (1000, 1.2, 5000) .maxAtTempts (10) .build (); }} Ici, nous définissons la méthode configServerRetryInterceptor for Spring Reryn à l'aide de notre intercepteur de nouvelle tentative personnalisé. Les méthodes utilisent RetryInterceptorBuilder pour créer un intervalle Retryoperations sans état selon les besoins, et définir l'intervalle de réchauffement initial à 1000 millisecondes, l'augmentation multiple est de 1,2 fois, l'intervalle de réchauffement maximal est de 5000 millisecondes et les temps de réchauffement maximum sont 10 fois. Le constructeur fournit également des interfaces telles que la configuration du mécanisme de réessayer, que les lecteurs intéressés peuvent étudier par eux-mêmes.
@ConditionalonMissingBean indique que ce bean est apparié lorsqu'il n'y a pas de bean nommé configServerretryInterceptor dans le beanfactory.
Enfin, dans SRC / Main / Resources / Meta-Inf / (aucun dossier ne peut être créé), créez un nouveau fichier Spring.factories, spécifiant que nous venons de créer la classe comme configuration au démarrage, afin qu'elle prenne effet avant d'obtenir la configuration distante:
org.springframework.cloud.bootstrap.bootstrapconfiguration = cn.zxuqian.configurations.retryconfiguration
test
Enfin, démarrez le projet Web dans la condition de fermeture de configuration, puis vous verrez que le projet démarre échoue après dix réessayer.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.