Comments (1)
This appears to be working just fine in the Redis environment
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Collections;
import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.GenericContainer;
import es.moki.ratelimitj.core.limiter.request.RequestLimitRule;
import es.moki.ratelimitj.core.limiter.request.RequestRateLimiter;
import es.moki.ratelimitj.redis.request.RedisRateLimiterFactory;
import io.lettuce.core.RedisClient;
public class RedisTest {
@Rule
public GenericContainer<?> redis = new GenericContainer<>("redis:3.0.6").withExposedPorts(6379);
@Test
public void test() {
final RedisRateLimiterFactory factory =
new RedisRateLimiterFactory(
RedisClient.create("redis://" + redis.getContainerIpAddress() + ":"
+ redis.getMappedPort(6379)));
final Duration precisionDuration = Duration.of(1, ChronoUnit.SECONDS);
final Set<RequestLimitRule> rules =
Collections.singleton(RequestLimitRule.of(Duration.ofSeconds(10), 1)
.withPrecision(precisionDuration));
final RequestRateLimiter requestRateLimiter = factory.getInstance(rules);
while (true) {
final UserObject user =
UserObject.builder().age(11).name("ABC").address("NewYork").build();
processStudent(user, requestRateLimiter);
}
}
private static void processStudent(final UserObject user,
final RequestRateLimiter addressRuleRateLimiter) {
if (!addressRuleRateLimiter.overLimitWhenIncremented(user.getAddress())) {
user.callStudent();
}
}
}
Output
10 Mar 2020 17:00:36 UserObject(name=ABC, age=11, address=NewYork, isProcessed=false)
10 Mar 2020 17:00:46 UserObject(name=ABC, age=11, address=NewYork, isProcessed=false)
10 Mar 2020 17:00:56 UserObject(name=ABC, age=11, address=NewYork, isProcessed=false)
10 Mar 2020 17:01:06 UserObject(name=ABC, age=11, address=NewYork, isProcessed=false)
10 Mar 2020 17:01:16 UserObject(name=ABC, age=11, address=NewYork, isProcessed=false)
Used TestContainer to validate
from ratelimitj.
Related Issues (20)
- InMemory rate limiter changes pushed to Maven Central HOT 2
- Getting exception while calling overLimitWhenIncremented
- redis 3.0 cluster ,client can not auto failover
- Bug in computing blockId
- Hard redis Dependency
- Dropwizard 2.X Support HOT 1
- Don't see any log related to @RateLimited
- Support for knowing remaining limit
- Redis key expiration and index of the database HOT 2
- Cool off period
- JSON 429 responses
- Rate limit does not work when working with other bundles
- java.lang.NoSuchMethodError when using lettuce 6.x HOT 3
- Outdated reactor-core version HOT 1
- Include backoff period for a given rule HOT 3
- Release 0.7.0 HOT 1
- Change `overLimitWhenIncremented` to return an object with limiting information instead of Boolean
- Question: Rate limiting toggles (dark launch) stable version availability?
- RedisRateLimiterFactory should be able to work with just a connection (rather than a RedisClient)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ratelimitj.