Skip to content

Commit 83ef8ef

Browse files
committed
Fix concurrency limiter issue
1 parent 064d386 commit 83ef8ef

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/AbstractConcurrencyLimiter.java

+5
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@ public boolean acquire() {
3030
* @return true if the acquisition is successful, false otherwise.
3131
*/
3232
protected abstract boolean doAcquire();
33+
34+
@Override
35+
public void complete() {
36+
}
37+
3338
}

joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@
2525
*/
2626
public interface ConcurrencyLimiter extends Licensee<ConcurrencyLimitPolicy> {
2727

28-
28+
void complete();
2929
}

joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/filter/inbound/ConcurrencyLimitFilter.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.jd.live.agent.governance.policy.service.limit.ConcurrencyLimitPolicy;
3232
import com.jd.live.agent.governance.request.ServiceRequest.InboundRequest;
3333

34+
import java.util.ArrayList;
3435
import java.util.List;
3536
import java.util.Map;
3637
import java.util.concurrent.CompletionStage;
@@ -65,6 +66,7 @@ public void initialize() {
6566
public <T extends InboundRequest> CompletionStage<Object> filter(InboundInvocation<T> invocation, InboundFilterChain chain) {
6667
ServicePolicy servicePolicy = invocation.getServiceMetadata().getServicePolicy();
6768
List<ConcurrencyLimitPolicy> concurrencyLimitPolicies = servicePolicy == null ? null : servicePolicy.getConcurrencyLimitPolicies();
69+
List<ConcurrencyLimiter> limiters = new ArrayList<>();
6870
if (null != concurrencyLimitPolicies && !concurrencyLimitPolicies.isEmpty()) {
6971
for (ConcurrencyLimitPolicy policy : concurrencyLimitPolicies) {
7072
// match logic
@@ -75,10 +77,17 @@ public <T extends InboundRequest> CompletionStage<Object> filter(InboundInvocati
7577
"The request is rejected by concurrency limiter. maxConcurrency=" +
7678
policy.getMaxConcurrency());
7779
}
80+
if (limiter != null) {
81+
limiters.add(limiter);
82+
}
7883
}
7984
}
8085
}
81-
return chain.filter(invocation);
86+
return chain.filter(invocation).whenComplete((o, throwable) -> {
87+
for (ConcurrencyLimiter limiter : limiters) {
88+
limiter.complete();
89+
}
90+
});
8291
}
8392

8493
/**

joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/concurrencylimit/resilience4j/Resilience4jConcurrencyLimiter.java

+5
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,9 @@ public Resilience4jConcurrencyLimiter(ConcurrencyLimitPolicy policy) {
5050
public boolean doAcquire() {
5151
return bulkhead.tryAcquirePermission();
5252
}
53+
54+
@Override
55+
public void complete() {
56+
bulkhead.onComplete();
57+
}
5358
}

joylive-plugin/joylive-transmission/joylive-transmission-springweb5/src/main/java/com/jd/live/agent/plugin/transmission/springweb/v5/definition/BodyInserterRequestDefinition.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* @since 1.6.0
3535
*/
3636
@Injectable
37-
@Extension(value = "BodyInserterRequestDefinition", order = PluginDefinition.ORDER_TRANSMISSION)
37+
@Extension(value = "BodyInserterRequestDefinition_v5", order = PluginDefinition.ORDER_TRANSMISSION)
3838
@ConditionalOnTransmissionEnabled
3939
@ConditionalOnClass(BodyInserterRequestDefinition.TYPE_BODY_INSERTER_QUEST)
4040
public class BodyInserterRequestDefinition extends PluginDefinitionAdapter {

0 commit comments

Comments
 (0)