Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitea9d6fc

Browse files
aq-ikhwa-techludomikula
authored andcommitted
Add handling for api delays in case of rate limit
1 parent7a3b3e5 commitea9d6fc

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
packageorg.lowcoder.api.framework.filter;
2+
3+
importorg.lowcoder.infra.config.repository.ServerConfigRepository;
4+
importorg.springframework.beans.factory.annotation.Autowired;
5+
importorg.springframework.core.Ordered;
6+
importorg.springframework.stereotype.Component;
7+
importorg.springframework.web.server.ServerWebExchange;
8+
importorg.springframework.web.server.WebFilter;
9+
importorg.springframework.web.server.WebFilterChain;
10+
importreactor.core.publisher.Mono;
11+
12+
importjava.time.Duration;
13+
14+
importstaticorg.lowcoder.api.framework.filter.FilterOrder.API_DELAY_FILTER;
15+
16+
@Component
17+
publicclassAPIDelayFilterimplementsWebFilter,Ordered {
18+
19+
@Autowired
20+
privateServerConfigRepositoryserverConfigRepository;
21+
22+
@Override
23+
publicintgetOrder() {
24+
returnAPI_DELAY_FILTER.getOrder();
25+
}
26+
27+
@Override
28+
publicMono<Void>filter(ServerWebExchangeexchange,WebFilterChainchain) {
29+
returnserverConfigRepository.findByKey("isRateLimited")
30+
.map(serverConfig -> {
31+
if(serverConfig.getValue() !=null &&Boolean.parseBoolean(serverConfig.getValue().toString())) {
32+
returnMono.delay(Duration.ofSeconds(5)).block();
33+
}else {
34+
returnMono.empty();
35+
}
36+
}).then(chain.filter(exchange));
37+
}
38+
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/FilterOrder.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public enum FilterOrder {
1010
REQUEST_COST(BEFORE_PROXY_CHAIN),
1111
THROTTLING(BEFORE_PROXY_CHAIN),
1212

13+
API_DELAY_FILTER(BEFORE_PROXY_CHAIN),
14+
1315
// WEB_FILTER_CHAIN_PROXY here
1416

1517
USER_BAN(AFTER_PROXY_CHAIN),

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/SharedPluginServices.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
importjava.util.function.Consumer;
66

77
importorg.lowcoder.api.framework.plugin.endpoint.PluginEndpointHandler;
8+
importorg.lowcoder.infra.config.repository.ServerConfigRepository;
89
importorg.lowcoder.plugin.api.LowcoderServices;
910
importorg.lowcoder.plugin.api.PluginEndpoint;
1011
importorg.lowcoder.plugin.api.event.LowcoderEvent;
12+
importorg.springframework.beans.factory.annotation.Autowired;
1113
importorg.springframework.context.event.EventListener;
1214
importorg.springframework.stereotype.Component;
1315

@@ -18,6 +20,9 @@
1820
publicclassSharedPluginServicesimplementsLowcoderServices
1921
{
2022
privatefinalPluginEndpointHandlerpluginEndpointHandler;
23+
24+
@Autowired
25+
privateServerConfigRepositoryserverConfigRepository;
2126

2227
privateList<Consumer<LowcoderEvent>>eventListeners =newLinkedList<>();
2328

@@ -41,4 +46,14 @@ public void registerEndpoints(String urlPrefix, List<PluginEndpoint> endpoints)
4146
{
4247
pluginEndpointHandler.registerEndpoints(urlPrefix,endpoints);
4348
}
49+
50+
@Override
51+
publicvoidsetConfig(Stringkey,Objectvalue) {
52+
serverConfigRepository.upsert(key,value).block();
53+
}
54+
55+
@Override
56+
publicObjectgetConfig(Stringkey) {
57+
returnserverConfigRepository.findByKey(key).block();
58+
}
4459
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp