Dans les systèmes distribués, afin d'assurer une cohérence solide des transactions distribuées de données, lors de l'appel de l'interface RPC ou de l'envoi de MQ, vous prenez une opération de réessayer pour empêcher le délai d'expiration de la demande de gigue de réseau. La façon la plus courante de réessayer est MQ, mais si vous n'introduisez pas MQ dans votre projet, ce sera gênant. Cet article présente principalement comment utiliser Spring Reryn pour implémenter les opérations de réessayer.
1. Ajouter des dépendances Maven
<Dedency> <ProupId> org.springframework.retry </proupId> <ArtifActid> Spring-retry </ artifactid> <version> 1.1.2.release </ version> </ Dependency> <Dedency> <ProupId> Org.Aspectj </ GroupId> <etifactid> AspectjWeaver </RgActid> <Dursed>
2. Ajouter la configuration de réessayer en démarrage
@Springbootapplication @enableretry public class application {public static void main (string [] args) {springApplication.run (application.class, args); }} 3. Service d'écriture
@Service public class RemoService {private static final logger logger = loggerfactory.getLogger (testController.class); @Retryable (value = {BusinessException.class}, maxAtTempts = 3, backoff = @backoff (delay = 5000l, multiplier = 2)) public void call () lève une exception {logger.info ("faire quelque chose ..."); Jetez une nouvelle BusinessException ("RPC Call Exception"); } @Recover public void Recover (BusinessException e) {Logger.info ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Écrivez le contrôleur
@RestController @RequestMapping ("/ test") Classe publique TestController {private static final logger logger = loggerfactory.getLogger (testController.class); @Autowired Private RemoService RemoService; @RequestMapping ("/ test") public String Login () lève une exception {RemoTeService.Call (); return string.valueof ("11"); } 5. Visitez http: // localhost: 8080 / test / test
6. Journal des tests
2017-07-25 19:28:07 [info] - [http-nio-53602-exec-1] - [com.test.retry.service.remoService.call (RemoService.java:19)] Faites quelque chose ...
2017-07-25 19:28:12 [info] - [http-nio-53602-exec-1] - [com.test.retry.service.remoService.call (RemoService.java:19)] Faites quelque chose ...
2017-07-25 19:28:22 [info] - [http-nio-53602-exec-1] - [com.test.retry.service.remoService.call (RemoService.java:19)] Faites quelque chose ...
2017-07-25 19:28:22 [info] - [http-nio-53602-exec-1] - [com.test.retry.service.remoService.recover (RemoService.java:24)]] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-07-25 19:28:22 [info] - [http-nio-53602-exec-1] - [com.test.retry.service.remoserservice.recover (RemoService.java:25)] RPC Call Exception Exception exception exception exception exception exception
7. Instructions de configuration connexes
@Enabletry pouvez-vous réessayer ? Lorsque la propriété ProxyTargetClass est vraie, utilisez le proxy CGLIB. Les annotations Java standard sont utilisées par défaut. Dans Spring Boot, ce paramètre peut être écrit dans l'entrée du programme.
@Retryable La méthode d'étiquetage de cette annotation sera réessayée lorsqu'une exception se produira
Valeur: spécifiez la classe d'exception à traiter
Inclure: la classe d'exception spécifiée gérée est la même que la valeur et la valeur par défaut est vide. Lorsque l'exclusion est également vide, toutes les exceptions sont par défaut
Exclure: spécifiez que les exceptions ne sont pas traitées, la valeur par défaut est vide, lorsque l'inclusion est également vide, par défaut toutes les exceptions
Maxattempts: Nombre maximum de tentatives. Par défaut 3 fois
Backoff: Réessayez la politique d'attente. Utilisez @backoff annotation par défaut
@Backoff réessayez la politique d'attente <br /> Lorsque les paramètres ne sont pas définis, FixebackOffPolicy est utilisé par défaut (spécifiez le temps d'attente) et réessayez les attentes de 1000 ms
Réglez le retard, utilisez FixedbackOffPolicy (spécifiez le temps d'attente) et essayez à nouveau le temps d'attente
Lorsque vous définissez le retard et le maxdealy, réessayez et attendez la distribution homogène entre ces deux valeurs
Set Delay, MaxDealy et Multiplicateur, utilisent ExponentialBackOffPolicy (implémentation de l'intervalle de réchauffement exponentiel), le multiplicateur spécifie le multiple de retard, tel que Delay = 5000L, Multiplier = 2, la première relance est de 5 secondes, la deuxième fois est de 10 secondes, et la troisième fois est de 20 secondes ...
@Recover est utilisé pour la méthode de réessayer échouée de @ RETRAYABLE. Les paramètres de la méthode de cette annotation doivent être une exception lancée par @Retryable, sinon elle ne sera pas reconnue. Le traitement du journal peut être effectué dans cette méthode.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.