From f62e16af459803dc36956353e91712dac55c5e54 Mon Sep 17 00:00:00 2001 From: fatemeh imanipour Date: Tue, 11 Aug 2026 20:31:22 +0330 Subject: [PATCH] Optimize wallet and api --- .../src/main/resources/application.yml | 1 + .../walletproxy/config/WebClientConfig.kt | 39 ++++++++++++++++--- .../opex/api/app/config/RateLimitConfig.kt | 13 +++++-- .../src/main/resources/application.yml | 9 +++-- 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/accountant/accountant-app/src/main/resources/application.yml b/accountant/accountant-app/src/main/resources/application.yml index 1f08d8860..f191ca34c 100644 --- a/accountant/accountant-app/src/main/resources/application.yml +++ b/accountant/accountant-app/src/main/resources/application.yml @@ -47,6 +47,7 @@ spring: instance-id: ${spring.application.name}:${server.port} healthCheckInterval: 20s prefer-ip-address: true + query-passing: true config: import: vault://secret/${spring.application.name} management: diff --git a/accountant/accountant-ports/accountant-wallet-proxy/src/main/kotlin/co/nilin/opex/accountant/ports/walletproxy/config/WebClientConfig.kt b/accountant/accountant-ports/accountant-wallet-proxy/src/main/kotlin/co/nilin/opex/accountant/ports/walletproxy/config/WebClientConfig.kt index 2ba1c3c02..2f9bbe64c 100644 --- a/accountant/accountant-ports/accountant-wallet-proxy/src/main/kotlin/co/nilin/opex/accountant/ports/walletproxy/config/WebClientConfig.kt +++ b/accountant/accountant-ports/accountant-wallet-proxy/src/main/kotlin/co/nilin/opex/accountant/ports/walletproxy/config/WebClientConfig.kt @@ -1,25 +1,52 @@ package co.nilin.opex.accountant.ports.walletproxy.config +import io.netty.channel.ChannelOption import org.springframework.cloud.client.ServiceInstance import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration +import org.springframework.http.client.reactive.ReactorClientHttpConnector import org.springframework.web.reactive.function.client.WebClient import org.zalando.logbook.Logbook import org.zalando.logbook.netty.LogbookClientHandler import reactor.netty.http.client.HttpClient +import reactor.netty.resources.ConnectionProvider +import java.time.Duration @Configuration class WebClientConfig { @Bean - fun webClient(loadBalancerFactory: ReactiveLoadBalancer.Factory, logbook: Logbook): WebClient { - val client = HttpClient.create().doOnConnected { it.addHandlerLast(LogbookClientHandler(logbook)) } + fun webClient( + loadBalancerFactory: ReactiveLoadBalancer.Factory, + logbook: Logbook + ): WebClient { + + val connectionProvider = ConnectionProvider.builder("accountant-wallet") + .maxIdleTime(Duration.ofSeconds(20)) + .maxLifeTime(Duration.ofMinutes(5)) + .pendingAcquireTimeout(Duration.ofSeconds(5)) + .evictInBackground(Duration.ofSeconds(30)) + .lifo() + .build() + + val client = HttpClient.create(connectionProvider) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000) + .responseTimeout(Duration.ofSeconds(10)) + .keepAlive(true) + .doOnConnected { + it.addHandlerLast(LogbookClientHandler(logbook)) + } + return WebClient.builder() - //.clientConnector(ReactorClientHttpConnector(client)) - .filter(ReactorLoadBalancerExchangeFilterFunction(loadBalancerFactory, emptyList())) + .clientConnector(ReactorClientHttpConnector(client)) + .filter( + ReactorLoadBalancerExchangeFilterFunction( + loadBalancerFactory, + emptyList() + ) + ) .build() } - -} +} \ No newline at end of file diff --git a/api/api-app/src/main/kotlin/co/nilin/opex/api/app/config/RateLimitConfig.kt b/api/api-app/src/main/kotlin/co/nilin/opex/api/app/config/RateLimitConfig.kt index fd9167451..054d639d8 100644 --- a/api/api-app/src/main/kotlin/co/nilin/opex/api/app/config/RateLimitConfig.kt +++ b/api/api-app/src/main/kotlin/co/nilin/opex/api/app/config/RateLimitConfig.kt @@ -53,12 +53,17 @@ class RateLimitConfig( return ReactiveSecurityContextHolder.getContext() .mapNotNull { it.authentication } .filter { it.isAuthenticated } - .flatMap { auth -> - applyRateLimit(auth.name, exchange, chain, groupId) + .map { auth -> + Mono.defer { + applyRateLimit(auth.name, exchange, chain, groupId) + } } - .switchIfEmpty( - chain.filter(exchange) + .defaultIfEmpty( + Mono.defer { + chain.filter(exchange) + } ) + .flatMap { it } } private fun applyRateLimit( diff --git a/wallet/wallet-app/src/main/resources/application.yml b/wallet/wallet-app/src/main/resources/application.yml index 488d21278..ec67e2e77 100644 --- a/wallet/wallet-app/src/main/resources/application.yml +++ b/wallet/wallet-app/src/main/resources/application.yml @@ -8,6 +8,8 @@ management: endpoint: health: show-details: when_authorized + probes: + enabled: true metrics: enabled: true prometheus: @@ -66,9 +68,10 @@ spring: host: ${CONSUL_HOST:localhost} port: 8500 discovery: - #healthCheckPath: ${management.context-path}/health instance-id: ${spring.application.name}:${server.port} - healthCheckInterval: 20s + health-check-path: /actuator/health/liveness + health-check-interval: 10s + health-check-timeout: 5s prefer-ip-address: true config: import: vault://secret/${spring.application.name} @@ -174,6 +177,4 @@ logging: co.nilin: INFO reactor.netty.http.client: INFO org.zalando.logbook: TRACE - org.hibernate.SQL: DEBUG - logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE swagger.authUrl: ${SWAGGER_AUTH_URL:https://api.opex.dev/auth}/realms/opex/protocol/openid-connect/token