From 4a008e5f28bcdbddd172a8a3b3f53733d7b2f4f7 Mon Sep 17 00:00:00 2001 From: snowflake-Zhao <763585773@qq.com> Date: Mon, 19 Feb 2024 16:33:08 +0800 Subject: [PATCH] https://zrzr20220926114535774.pingcode.com/pjm/items/65d311c404ae6f86b7c0603c? #XTS-20 pseduRequestHandler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提交了基础功能以及ab测试脚本 --- .../ratelimiter/HandlerController.java | 34 ++++++++++++++++--- .../src/main/resources/application.properties | 2 +- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/sys_design_proj/rate-limiter/src/main/java/com/example/ratelimiter/HandlerController.java b/sys_design_proj/rate-limiter/src/main/java/com/example/ratelimiter/HandlerController.java index 902f7dc..0bd6445 100644 --- a/sys_design_proj/rate-limiter/src/main/java/com/example/ratelimiter/HandlerController.java +++ b/sys_design_proj/rate-limiter/src/main/java/com/example/ratelimiter/HandlerController.java @@ -7,17 +7,41 @@ @RestController public class HandlerController { + ////////////////////////////////// + // Testing Apache Bench + // ab -n 100 -c 100 http://localhost:8090/monolithicdosth + ////////////////////////////////// + public static final String ERR_TOO_MANY_REQUESTS = "Too many requests"; + public static final String LOG_EXCEED_REQUEST_LIMIT = "Reaching the limit of the request:{%d}"; + public static int processingReqCount = 0; + public static int processingReqLimit = 10; + public static final Object syncObj = new Object(); - @RequestMapping public String handler() throws Exception { throw new Exception("test"); - } - @RequestMapping(value = "/dosomething", method = RequestMethod.GET) + + @RequestMapping(value = "/monolithicdosth", method = RequestMethod.GET) public void dosomething(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.setStatus(429); - response.getOutputStream().write("Too many requests".getBytes()); + synchronized (syncObj) { + processingReqCount++; + try { + if (processingReqCount >= processingReqLimit) { + System.out.println(String.format(LOG_EXCEED_REQUEST_LIMIT, processingReqCount)); + response.setStatus(429); + response.getOutputStream().write(ERR_TOO_MANY_REQUESTS.getBytes()); + return; + } + // TODO:想想我们怎么搞一下,这个处理request的逻辑 + processRequest(); + } finally { + processingReqLimit--; + } + } } + private void processRequest() { + + } } diff --git a/sys_design_proj/rate-limiter/src/main/resources/application.properties b/sys_design_proj/rate-limiter/src/main/resources/application.properties index 8b13789..f620381 100644 --- a/sys_design_proj/rate-limiter/src/main/resources/application.properties +++ b/sys_design_proj/rate-limiter/src/main/resources/application.properties @@ -1 +1 @@ - +server.port=8090