เมื่อใช้ Springboot เป็นอินเทอร์เฟซเพื่อเข้าถึงวิธีการ จำกัด การ จำกัด ปัจจุบันของอินเทอร์เฟซเราสามารถใช้แพ็คเกจ Guava ของ Google เพื่อใช้งานได้ แน่นอนว่าเรายังสามารถใช้การ จำกัด ปัจจุบันด้วยตนเอง การ จำกัด ปัจจุบันใน Guava เป็นการทดสอบที่ยาวนาน เราไม่จำเป็นต้องเขียนอีกอัน หากคุณต้องการเข้าใจหลักการของการ จำกัด ปัจจุบันคุณสามารถตรวจสอบข้อมูลที่เกี่ยวข้องได้ด้วยตัวเอง บทความนี้จะไม่อธิบาย
คำแนะนำสำหรับการใช้งาน
แนะนำแพ็คเกจที่เกี่ยวข้องกับ GUAVA ให้กับโครงการ
http://mvnrepository.com/artifact/com.google.guava/guava/21.0
โครงการ Maven
<!-https://mvnrepository.com/artifact/com.google.guava/guava-> <การพึ่งพา> <GroupId> com.google.guava </groupId> <ratifactid> Guava </artifactid>
โครงการ Gradle
// https://mvnrepository.com/artifact/com.google.guava/guavacompile Group: 'com.google.guava', ชื่อ: 'guava', เวอร์ชัน: '21 .0 '
เขียน Interceptor SpringMVC
Smoothburstyinterceptor.java
นำเข้า com.google.common.util.concurrent.rateLimiter; นำเข้า org.springframework.web.servlet.modelandview; นำเข้า org.springframework.web.servlet.handler.handlerinterinterceptoradapter; javax.servlet.http.httpservletResponse; นำเข้า java.util.concurrent.timeUnit; คลาสสาธารณะ SmoothburstyInterceptor ขยาย HandlerInterceptorAdapter {Public Enum LimitType {Drop, // Discard Wait // รอ} ** / *** วิธีการ จำกัด ปัจจุบัน*/ Private LimitType LimitType = LimitType.drop; สาธารณะ SmoothBurStyInterceptor () {this.limiter = ratelimiter.create (10); }/** * @Param TPS FLOW LIMIT (การประมวลผลต่อวินาที) * @Param LimitType ประเภทขีด จำกัด ปัจจุบัน: รอ/ทิ้ง (เพื่อถึงขีด จำกัด การไหล) */สาธารณะ SmoothBurstyInterceptor (int TPS, SmoothBurstyInterceptor.limitType LimitType) this.limitType = LimitType; }/*** @param permitspersecond จำนวนโทเค็นใหม่เพิ่มต่อวินาที* @param LimitType ประเภทขีด จำกัด ปัจจุบัน: รอ/วาง (ถึงขีด จำกัด )*/สาธารณะ SmoothBurstyInterceptor timeunit.milliseconds); this.limitType = LimitType; } @Override บูลีนสาธารณะ prehandle (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ) โยนข้อยกเว้น {ถ้า (LimityType.equals (LimityType.drop)) {ถ้า (limiter.tryAcquire ()) {return.prehandle }} else {limiter.acquire (); return super.prehandle (คำขอ, การตอบสนอง, handler); } โยนข้อยกเว้นใหม่ ("ข้อยกเว้นเครือข่าย!"); // ข้อความแสดงข้อผิดพลาดที่ได้รับแจ้งไปยังหน้าหลังจากถึงขีด จำกัด ปัจจุบัน } @Override โมฆะสาธารณะ Postthandle (คำขอ httpservletRequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, modelandview modelandview) โยนข้อยกเว้น {super.posthandle (คำขอ, การตอบสนอง, handler, modelandview); } @Override โมฆะสาธารณะ ftercompletion (คำขอ httpservletRequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, ข้อยกเว้น ex) โยนข้อยกเว้น {super.aftercompletion (คำขอ, การตอบสนอง, handler, ex); } Ratelimiter สาธารณะ getLimiter () {return limiter; } โมฆะสาธารณะ setlimiter (ratelimiter limiter) {this.limiter = limiter; - การกำหนดค่าการสกัดกั้น SpringMVC
webConfig.java
@ComponentPublic คลาส WebConfig ขยาย WebMVCCONFigurerAdapter {@Override โมฆะสาธารณะ AddInterceptors (InterceptorRegistry Registry) {// interceptors หลายรูปแบบรูปแบบรีจิสทรีโซ่ Interceptor // ขีด จำกัด ปัจจุบันสามารถกำหนดค่าเป็น SmoothBurstyInterceptor.limitType.drop Drop Request หรือ SmoothBurstyInterceptor.limitType.wait รอ 100 เป็นอัตราต่อวินาที super.addinterceptors (รีจิสทรี); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น