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