org.knowm.xchange.kucoin.KucoinResilience Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xchange-kucoin Show documentation
Show all versions of xchange-kucoin Show documentation
XChange implementation for the Kucoin Exchange
The newest version!
package org.knowm.xchange.kucoin;
import static javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import java.time.Duration;
import org.knowm.xchange.client.ResilienceRegistries;
import org.knowm.xchange.client.ResilienceUtils;
public class KucoinResilience {
public static final String PUBLIC_REST_ENDPOINT_RATE_LIMITER = "publicEndpointLimit";
public static final String PRIVATE_REST_ENDPOINT_RATE_LIMITER = "privateEndpointLimit";
public static final String CANCEL_ALL_ORDERS_RATE_LIMITER = "cancelAllOrdersLimit";
public static ResilienceRegistries createRegistries() {
final ResilienceRegistries registries = new ResilienceRegistries();
registries
.rateLimiters()
.rateLimiter(
PUBLIC_REST_ENDPOINT_RATE_LIMITER,
RateLimiterConfig.from(registries.rateLimiters().getDefaultConfig())
.limitRefreshPeriod(Duration.ofSeconds(10))
.limitForPeriod(30)
.drainPermissionsOnResult(
e -> ResilienceUtils.matchesHttpCode(e, TOO_MANY_REQUESTS))
.build());
registries
.rateLimiters()
.rateLimiter(
PRIVATE_REST_ENDPOINT_RATE_LIMITER,
RateLimiterConfig.from(registries.rateLimiters().getDefaultConfig())
.limitRefreshPeriod(Duration.ofSeconds(3))
.limitForPeriod(30)
.drainPermissionsOnResult(
e -> ResilienceUtils.matchesHttpCode(e, TOO_MANY_REQUESTS))
.build());
// see https://docs.kucoin.com/#cancel-all-orders
// This API is restricted for each account, the request rate limit is 3 times/3s.
registries
.rateLimiters()
.rateLimiter(
CANCEL_ALL_ORDERS_RATE_LIMITER,
RateLimiterConfig.from(registries.rateLimiters().getDefaultConfig())
.limitRefreshPeriod(Duration.ofSeconds(3))
.limitForPeriod(3)
.drainPermissionsOnResult(
e -> ResilienceUtils.matchesHttpCode(e, TOO_MANY_REQUESTS))
.build());
return registries;
}
}