Rate Limiting Pattern #2973#3291
Conversation
…ling for AdaptiveRateLimiter.java
…Token Bucket Rate Limiter
PR SummaryImplements the Rate Limiting Design Pattern in Java using three strategies (Token Bucket, Fixed Window, Adaptive Rate Limiter). Includes a demo App, per-operation limiters, tests, diagrams, and documentation. Updates the build to include a new rate-limiting-pattern module and provides comprehensive test coverage. Changes
autogenerated by presubmit.ai |
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Commits Considered (3)
- 331beb9: Updated README.md. All test case passed. Updated with Google Java Guidelines
- ed01b7b: Added Class Diagram and Flow Diagrams for Adaptive, Fixed Window and Token Bucket Rate Limiter
- dd0fc2b: need to fix one test case shouldGraduallyIncreaseLimitWhenHealthy failing for AdaptiveRateLimiter.java
Files Processed (25)
- pom.xml (2 hunks)
- rate-limiting-pattern/README.md (1 hunk)
- rate-limiting-pattern/etc/AdaptiveRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/FixedWindowRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/TokenBucketRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/UMLClassDiagram.png (0 hunks)
- rate-limiting-pattern/pom.xml (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/AdaptiveRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/App.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/FindCustomerRequest.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimitException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimitOperation.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/ServiceUnavailableException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/ThrottlingException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/TokenBucketRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/AdaptiveRateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/ConcurrencyTests.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/ExceptionTests.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FindCustomerRequestTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/RateLimitOperationTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/RateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/TokenBucketRateLimiterTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Files Processed (24)
- rate-limiting-pattern/README.md (1 hunk)
- rate-limiting-pattern/etc/AdaptiveRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/FixedWindowRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/TokenBucketRateLimiter.png (0 hunks)
- rate-limiting-pattern/etc/UMLClassDiagram.png (0 hunks)
- rate-limiting-pattern/pom.xml (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/AdaptiveRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/App.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/FindCustomerRequest.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimitException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimitOperation.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/RateLimiter.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/ServiceUnavailableException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/ThrottlingException.java (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/TokenBucketRateLimiter.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/AdaptiveRateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/ConcurrencyTests.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/ExceptionTests.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FindCustomerRequestTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/RateLimitOperationTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/RateLimiterTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/TokenBucketRateLimiterTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Files Processed (1)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java [24-28]
enhancement: "Improve test timing reliability."
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Files Processed (1)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FixedWindowRateLimiterTest.java [26-29]
enhancement: "Improve window reset check in
shouldResetCounterAfterWindowtest."
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Commits Considered (6)
- 54d7396: added test coverage for app.java and fixed random to be thread safe #2973
- 4e886f8: added test coverage for app.java and fixed random to be thread safe #2973
- 0889442: added test coverage for app.java and fixed random to be thread safe #2973
- 5120195: added test coverage for app.java and fixed random to be thread safe #2973
- 3a9de27: added test coverage for app.java and fixed random to be thread safe #2973
- fe253e4: added test coverage for app.java and fixed random to be thread safe #2973
Files Processed (5)
- rate-limiting-pattern/pom.xml (1 hunk)
- rate-limiting-pattern/src/main/java/com/iluwatar/rate/limiting/pattern/App.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/AppTest.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/AppTestUtils.java (1 hunk)
- rate-limiting-pattern/src/test/java/com/iluwatar/rate/limiting/pattern/FindCustomerRequestTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
pom.xml
Outdated
| <module>visitor</module> | ||
| <module>backpressure</module> | ||
| <module>actor-model</module> | ||
| <module>rate-limiting-pattern</module> |
There was a problem hiding this comment.
can refactor spacing
rate-limiting-pattern/pom.xml
Outdated
| <groupId>ch.qos.logback</groupId> | ||
| <artifactId>logback-classic</artifactId> | ||
| <version>1.4.11</version> | ||
| </dependency> |
|
|
This PR is stale because it has been open 60 days with no activity. |
There was a problem hiding this comment.
✅ LGTM!
Review Summary
Commits Considered (1)
- f3e0b4d: Merge branch 'master' into master
Files Processed (1)
- pom.xml (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
pom.xml [251-251]
maintainability: "Introduce rate-limiting-pattern module"
|
Closes #2973 |
|
|
@all-contributors please add @skamble2 for code |
|
I've put up a pull request to add @skamble2! 🎉 |







Pull Request Template
What does this PR do?
This PR implements the Rate Limiting Design Pattern in Java using three different strategies:
It simulates concurrent client requests to multiple services (S3, DynamoDB, Lambda) and applies appropriate rate-limiting logic to manage request throughput, prevent system overload, and simulate elastic behavior under pressure.