In verteilten Systemen, um eine starke Konsistenz von datenverteilten Transaktionen zu gewährleisten, nehmen Sie beim Aufrufen der RPC -Schnittstelle oder beim Senden von MQ einen Wiederholungsvorgang durch, um das Timeout der Netzwerk -Jitter -Anfrage zu verhindern. Der häufigste Weg zum Wiederholen ist MQ. Wenn Sie jedoch keinen MQ in Ihr Projekt einführen, ist dies unpraktisch. In diesem Artikel wird hauptsächlich eingeführt, wie der Spring -Wiederholung zur Implementierung von Wiederholungsvorgängen verwendet wird.
1. Fügen Sie Maven -Abhängigkeiten hinzu
<Depepy> <gruppe> org.springFramework.retry </GroupId> <artifactId> Spring-Retry </artifactId> <version> 1.1.2.Release </Version> </abhängig> <abhängigkeit> <gruppeId> org.
2. Fügen Sie die Wiederholungskonfiguration im Start hinzu
@SpringbootApplication @Enabletretry Public Class Application {public static void main (String [] args) {SpringApplication.run (application.class, args); }} 3. Schreiben Sie Dienst
@Service Public Class RemoteService {private statische legale logger logger = loggerfactory.getLogger (testcontroller.class); @Retryable (value = {BusinessException.class}, maxattempts = 3, backOff = @backoff (delay = 5000L, multiplier = 2)) public void call () löst eine Ausnahme aus {logger.info ("mach etwas ..."); Neue BusinessException werfen ("RPC Call Exception"); } @Recover public void recover (businessException e) {logger.info ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Schreiben Sie Controller
@RestController @RequestMapping ("/test") public class testcontroller {private static final Logger logger = loggerfactory.getLogger (testcontroller.class); @Autowired Private RemoteService RemoteService; @RequestMapping ("/test") public String login () löst Ausnahme {remoteService.call () aus; return String.Valueof ("11"); } 5. Besuchen Sie http: // localhost: 8080/test/test
6. Testprotokoll
2017-07-25 19:28:07 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] tun etwas ...
2017-07-25 19:28:12 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] tun etwas ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteservice.java:19)] tun etwas ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (remoteservice.java:24)] ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (remoteservice.java:25)] RPC Call Exception
7. Verwandte Konfigurationsanweisungen
@Enableretry kannst du es noch einmal versuchen ? Verwenden Sie CGGLIB Proxy, wenn die Eigenschaft der ProxytargetClass -Eigenschaft wahr ist. Standard -Java -Anmerkungen werden standardmäßig verwendet. Im Spring Boot kann dieser Parameter im Programmeingang geschrieben werden.
@Retyable Die Kennzeichnung dieser Annotation wird erneut verfälscht, wenn eine Ausnahme eintritt
Wert: Geben Sie die zu verarbeitende Ausnahmeklasse an
Integrieren: Die angegebene Ausnahmeklasse, die behandelt wird, entspricht dem Wert, und der Standard ist leer. Wenn das Ausschluss auch leer ist, werden alle Ausnahmen standardmäßig alle
Ausschließen: Geben Sie an, dass Ausnahmen nicht verarbeitet werden, die Standardeinstellung leer ist, wenn auch einbezogen wird, standardmäßig alle Ausnahmen standardmäßig sind
Maxattemptes: Maximale Anzahl von Wiederholungen. Standard dreimal
Backoff: Wiederholen Sie die Wartepolitik. Verwenden Sie standardmäßig @backoff Annotation
@Backoff Wiederholen Sie die Wartepolitik <BR /> Wenn die Parameter nicht festgelegt sind, wird standardmäßig festgelegt, dass Fixbackoffpolicy verwendet wird (Angeben Sie die Wartezeit) und die Wartezeiten für 1000 ms wiederholen
Stellen Sie die Verzögerung fest, verwenden Sie FixedBackOffPolicy (geben Sie die Wartezeit an) und versuchen Sie, die Wartezeit erneut auszufüllen, um erneut ausgefüllt zu werden
Versuchen Sie beim Festlegen von Verzögerungen und Maxdealys erneut und warten Sie auf die homogene Verteilung zwischen diesen beiden Werten
Setzen Sie Verzögerungen, Maxdealy und Multiplikator, verwenden Sie ExponentialbackOffPolicy (Implementierung des Exponential -Wiederholungsintervalls), Multiplikator gibt das Verzögerungs -Multiple an, z.
@Recover wird für die fehlgeschlagene Wiederholungsmethode von @Retypable verwendet. Die Methodenparameter dieser Annotation müssen eine Ausnahme sein, die von @Retryable ausgelöst wird, sonst wird sie nicht erkannt. Die Protokollverarbeitung kann in dieser Methode durchgeführt werden.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.