Wenn Sie Springboot als Schnittstelle verwenden, um auf die Schnittstelle zu erhalten, können wir das Guava -Paket von Google verwenden, um es zu implementieren. Natürlich können wir auch die aktuelle Begrenzung alleine umsetzen. Die aktuelle Einschränkung in Guava ist ein langjähriger Test. Wir müssen keinen anderen schreiben. Wenn Sie das Prinzip der aktuellen Begrenzung verstehen möchten, können Sie die relevanten Informationen selbst überprüfen. Dieser Artikel wird es nicht erklären.
Anweisungen zur Verwendung
Einführung von Guava -bezogenen Paketen in das Projekt
http://mvnrepository.com/artifact/com.google.guava/guava/21.0
Maven -Projekt
<!-https://mvnrepository.com/artifact/com.google.guava/guava-> <depeopecy> <gruppe> com.google.guava </Groupid> <artifactid> Guava </artifactid> <version> 21.0 </Version> </abhängig>
Gradle -Projekt
// https://mvnrepository.com/artifact/com.google.guava/guavacompile Group: 'com.google.guava', Name: 'Guava', Version: '21 .0 ''
Schreiben Sie einen SpringMVC -Interceptor
SmoothBurstyInterceptor.java
import com.google.common.util.concurrent.Ratelimiter; import org.springframework javax.servlet.http.httpServletResponse; import Java.util.concurrent / *** Aktuelle Grenzmethode*/ private limitType limitType = limitType.drop; public SmoothBurstyInterceptor () {this.limiter = ratelimiter.create (10); }/** * @param TPS Flow Limit (Verarbeitung pro Sekunde) * @param limitType Current Limit Typ: Wait/Abwerfen (um die Durchflussgrenze zu erreichen) */public SmoothBurstyInterceptor (int tps, glattburstyInterceptor.limittype limitType) {this.limitter = ratelimiter.create (TPS); this.limittype = limitType; } /** * @param permitsPerSecond Number of new tokens added per second* @param limitType Current limit type: Wait/Drop (to reach the limit) */ public SmoothBurstyInterceptor(double permitsPerSecond, SmoothBurstyInterceptor.LimitType limitType) { this.limitter = RateLimiter.create(permitsPerSecond, 1000, TimeUnit.Millisekunden); this.limittype = limitType; } @Override public boolean prehandle (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler) löst eine Ausnahme aus {if (limitType.equals (limitType.drop)) {if (limiter.tryacquire ()) {return super.prehandle (Anfrage, Reaktion, Handliger, Handler); }} else {limiter.acquire (); return Super.pehandle (Anfrage, Antwort, Handler); } Wirf eine neue Ausnahme ("Netzwerkausnahme!"); // Die auf die Seite aufgeforderte Fehlermeldung, die nach dem aktuellen Limit erreicht wurde. } @Override public void postSandle (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler, modelAndView modelAndView) löst eine Ausnahme aus (Super.PoSHandle (Anfrage, Antwort, Handler, ModelandView); } @Override public void AfterCompletion (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler, Ausnahme ex) Ausnahme {Super.afterCompletion (Anfrage, Antwort, Handler, Ex); } public ratelimiter getLimiter () {return limper; } public void setLimiter (ratelimiter limiter) {this.limiter = limper; }} SpringMVC -Interception -Konfiguration
Webconfig.java
@ComponentPublic Class WebConfig erweitert WebMVCConFigurerAdapter {@Override public void addinterceptors (InterceptorRegistry -Registrierung) {// Mehrere Interceptors bilden eine Interceptor -Kettenregistrierung. // Die aktuelle Grenze kann als SURTBURSTYInterceptor.Limittype.drop -Drop -Anforderung oder SmoothBurstyInterceptor.Limittype.wait -Wartekonfiguration konfiguriert 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.