SpringBoot를 인터페이스로 사용하여 인터페이스 전류 제한을 수행하는 방법에 액세스 할 때 Google의 Guava 패키지를 사용하여 구현할 수 있습니다. 물론, 우리는 또한 현재 제한을 구현할 수 있습니다. 구아바의 현재 제한은 오랜 테스트입니다. 우리는 다른 것을 쓸 필요가 없습니다. 현재 제한의 원리를 이해하려면 관련 정보를 직접 확인할 수 있습니다. 이 기사는 설명하지 않습니다.
사용 지침
프로젝트에 Guava 관련 패키지를 소개합니다
http://mvnrepository.com/artifact/com.google.guava/guava/21.0
Maven 프로젝트
<!-https://mvnrepository.com/artifact/com.google.guava/guava-> <pectionency> <groupid> com.google.guava </groupId> <artifactId> guava </artifactid> </version> </decomeency>
Gradle 프로젝트
// https://mvnrepository.com/artifact/com.google.guava/guavacompile Group : 'com.google.guava', 이름 : 'Guava', 버전 : '21 .0 '
SpringMVC 인터셉터를 작성하십시오
SmoothBurstyinterceptor.java
import com.google.common.util.concurrent.ratelimiter; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.handler.handlerinterceptoradapter; import javax.servlet.httpervletrequest; import; javax.servlet.http.httptp.httpservletresponse; import java.util.concurrent.timeUnit; public class smoothburstyinterceptor 확장 핸들러 interceptorAdapter {public enum limittype, // discard wait // 대기}/*** 현재 리미터*/private ratelimiter 한계; / *** 현재 한계 메소드*/ private limittype limittype = limittype.drop; public smoothburstyinterceptor () {this.limiter = ratelimiter.create (10); }/** * @Param TPS 흐름 한계 (초당 처리) * @Param LimitType 전류 제한 유형 : 대기/파괴 (흐름 한계에 도달하기 위해) */public smoothburstyinterceptor (int tps, smoothburstyinterceptor.limittype limittype) {this.limitter = ratelimiter.create (tps); this.limittype = limittype; }/*** @param permitspersecond 초당 새 토큰 수가 추가되었습니다* @param limittype 전류 제한 유형 : 대기/드롭 (한계에 도달)*/public smoothburstyinterceptor (double remitspersecond, smoothburstyinterceptor.limittype limittype) {this.limitter = ratelimitere (permitsperecond, 1000) TimeUnit.milliseconds); this.limittype = limittype; } @override public boolean prehandle (httpservletrequest 요청, httpservletreponse 응답, 객체 핸들러) 예외는 {if (limittype.equals (limittype.drop)) {if (limiter.tryAcquire ()) {return super.prehandle (요청, 응답, 핸들러); }} else {limiter.acquire (); Super.prehandle을 반환합니다 (요청, 응답, 핸들러); } 새 예외를 던지십시오 ( "Network Exception!"); // 현재 한도에 도달 한 후 페이지에 오류 메시지가 표시됩니다. } @override public void posthandle (httpservletrequest request, httpservletreponse 응답, 객체 핸들러, ModelAndView ModelAndView)은 예외 {super.posThandle (요청, 응답, 핸들러, 모델 및 모델 및 모델 및 모델 및 모델 뷰를 던집니다. } @override public void afthCompletion (httpservletrequest 요청, httpservletreponse 응답, 객체 핸들러, 예외)은 예외 {super.fterCompletion (요청, 응답, 핸들러, Ex); } public ratelimiter getLimiter () {return Limiter; } public void setLimiter (Ratelimiter Limiter) {this.limiter = Limiter; }} SpringMVC 차단 구성
webconfig.java
@ComponentPublic Class WebConfig는 WebMvcConfigurerAdapter {@Override public void addinterceptors (interceptorregistry registry) {// 다중 인터셉터를 형성합니다. interceptor 체인 레지스트리 (Addinterceptor) (100, smoothburstyinterceptor.limittype.drop). // 현재 한도는 SmoothBurstyInterceptor.limitType.Drop Drop Request 또는 SmoothBurstyinterceptor.limittype.wait 대기로 구성 할 수 있습니다. 100은 초당 Super.addinterceptor (registry); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.