Lorsque vous utilisez Springboot comme interface pour accéder à la limitation de la limitation de courant d'interface, nous pouvons utiliser le package Guava de Google pour l'implémenter. Bien sûr, nous pouvons également mettre en œuvre la limitation actuelle par nous-mêmes. La limitation actuelle de la goyave est un test de longue date. Nous n'avons pas besoin d'en écrire un autre. Si vous souhaitez comprendre le principe de la limitation actuelle, vous pouvez vérifier vous-même les informations pertinentes. Cet article ne l'expliquera pas.
Instructions pour une utilisation
Présentation des packages liés à la goyave au projet
http://mvnrepository.com/artifact/com.google.guava/guava/21.0
projet Maven
<! - https://mvnrepository.com/artifact/com.google.guava/guava -> <dedendency> <proupId> com.google.guava </proncId> <ArtefactId> Guava </ artifactId> <Dersion> 21.0 </DERNIFRENCE> </Dedency>
Gradle Project
// https://mvnrepository.com/artifact/com.google.guava/guavacompile Groupe: 'com.google.guava', nom: 'Guava', version: '21 .0 '
Écrivez un intercepteur SpringMVC
Smoothburstyinterceptor.java
import com.google.common.util.concurrent.ratelimiter; import org.springframework.web.servlet.modelandView; import org.springframework.web.servlet.httppergerceptoradapter; import javax.servlet.http.httpperceptoradapter; import; javax.servlet.http.httpservletResponse; import java.util.concurrent.timeUnit; public class lisserstyInterceptor étend le gestionnaire de gestionnaire InteriterAdapter {public enum limitertype {drop, // discard wait // attend} / ** * actuel limiter * / private rateliter limite; / ** * Méthode de limite actuelle * / private limitType limitType = limitType.drop; public smoothburstyInterceptor () {this.limiter = ratelimiter.create (10); } / ** * @param TPS Flow Limit (Traitement par seconde) * @param limitType Current Limit Type: Wait / Discard (Pour atteindre la limite de flux) * / public SmoothBurstyInterceptor (int tps, smoothburstyinterceptor.limittype limitType) {this.limitter = ratelimiter.create (tps); this.limitType = limiteType; } / ** * @param permtsPersecond Nombre de nouveaux jetons ajoutés par seconde * @param limitType Current limite Type: Wait / Drop (pour atteindre la limite) * / public SmoothBurstyInterceptor (Double PermitsPersecond, SmoothBurstyInterceptor.limitType LimitType) {This.limiter = Rateliter.Create (permetsPeSecold, 1000, TimeUnit.Millisecondes); this.limitType = limiteType; } @Override Public Boolean Prehandle (demande httpservletRequest, réponse httpservletResponse, gestionnaire d'objets) lève une exception {if (limitType.equals (limitType.drop)) {if (limiter.tryacquire ()) {return super.prehandle (demande, handler); }} else {limiter.acquire (); return super.prehandle (demande, réponse, gestionnaire); } Jetez une nouvelle exception ("Exception du réseau!"); // Le message d'erreur a été invité à la page après l'atteinte de la limite actuelle. } @Override public void Posthandle (requête httpservletRequest, réponse httpservletResponse, gestionnaire d'objets, modelAndView ModelAndView) lève une exception {super.posthandle (request, réponse, gestionnaire, modelAndView); } @Override public void afterCompletion (requette httpServletRequest, réponse httpservletResponse, gestionnaire d'objets, exception ex) lève une exception {super.AfterCompletion (request, réponse, gestionnaire, ex); } public ratelimiter getlimiter () {limiter de retour; } public void setlimiter (limiter ratelimiter) {this.limiter = limiter; }} Configuration d'interception SpringMVC
Webconfig.java
@ComponentPublic Class WebConfig étend webmvcConfigurerAdapter {@Override public void AddInterceptors (Registre interceptorgistry) {// plusieurs intercepteurs forment un registre de chaîne interceptor.AddInterceptor (New SmootherStyInterceptor (100, SmoothburstyInterceptor.limitType.Drop)). // La limite de courant peut être configurée comme SmoothburstyInterceptor.limitType.drop Demande de dépôt ou SmoothburstyInterceptor.limitType.Wait Wait, 100 est le taux par seconde super.addinterceptors (registre); }}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.