При использовании Springboot в качестве интерфейса для доступа к тому, как сделать ограничение тока интерфейса, мы можем использовать пакет Google Guava для его реализации. Конечно, мы также можем реализовать текущее ограничение самим. Ток-ограничение в гуаве является давним испытанием. Нам не нужно писать еще один. Если вы хотите понять принцип текущего ограничения, вы можете самостоятельно проверить соответствующую информацию. Эта статья не объяснит.
Инструкции для использования
Представление пакетов, связанных с гуавой в проект
http://mvnrepository.com/artifact/com.google.guava/guava/21.0
Maven Project
<!-https://mvnrepository.com/artifact/com.google.guava/guava-> <dependence> <groupid> com.google.guava </GroupId> <ratifactid> guava </artifactid> <serse> 21.0 </version> </regy>
Gradle Project
// https://mvnrepository.com/artifact/com.google.guava/Guavacompile
Напишите перехватчик Springmvc
SmoothburstyInterceptor.java
Импорт com.google.common.util.concurrent.ratelimiter; import org.springframework.web.servlet.modelandView; import org.springframework.web.servlet.handler.handlerinterceptorAdapter; import javax.servlet.http.httpserveltrequest; javax.servlet.http.httpservletresponse; import java.util.concurrent.timeUnit; public class SmoothburstyInterceptor Extends HandlerInterceptorAdapter {public enum LimitType {Drop, // Отказ от ожидания // ожидания}/*** Текущий ограничитель ограничителя*/частный ограничение RatelImiter; / *** Метод текущего предела*/ private limittype LimitType = LimitType.drop; public SmoothBurstyInterceptor () {this.limiter = ratelimiter.create (10); }/** * @param TPS Предел потока (обработка в секунду) * @param LimitType Thurning Limit Type: WAIT/DISCARD (чтобы достичь предела потока) */public SmoothburstyInterceptor (int tps, SmoothburstyInterceptor.limittype limittype) {this.limetter = ratelimiter.create (tps); this.limittype = LimitType; }/*** @param outspersecond Количество новых токенов, добавленных в секунду* @param LimitType Thurning Type: Wait/Drop (чтобы достичь предела)*/public SmoothBurstyInterceptor (двойная мощность, SmoothBurstyInterceptor. TimeUnit.milliseconds); this.limittype = LimitType; } @Override public boolean prehandle (запрос httpservletrequest, httpservletresponse, обработчик объекта) выбросит исключение {if (limittype.equals (limittype.drop)) {if (limiter.tryacquire ()) {return super.prehandle (запрос, ответ, handler); }} else {limiter.acquire (); вернуть Super.prehandle (запрос, ответ, обработчик); } Выбросить новое исключение ("Exception Exception!"); // Сообщение об ошибке, представленное на страницу после достижения текущего предела. } @Override public void poshandle (httpservletrequest, httpservletresponse, обработчик объекта, ModelandView ModelandView), выбрасывает исключение {super.poSthandle (запрос, ответ, обработчик, ModelAndView); } @Override public void -последствия (запрос httpservlectrequest, httpservletresponse, обработчик объекта, исключение Ex) выбрасывает исключение {super.afterCompletion (запрос, ответ, обработчик, ex); } public RateLimiter getLimiter () {return Limiter; } public void setLimiter (Ratelimiter Limiter) {this.Limiter = Limiter; }} Конфигурация перехвата SpringMVC
Webconfig.java
@Componentpublic class webconfig extends webmvcconfigureradapter {@override public void addinterceptors (реестр перехвата) {// Многочисленные перехватчики образуют реестр цепочек перехвата. // Токочный предел может быть настроен как SmoothBurstyInterceptor.LimitType.drop Запрос на падение или SmoothBurstyInterceptor.LimitType.Wait WAIT, 100 - это скорость в секунду Super.adDinterceptors (реестр); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.