diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/AbstractConcurrencyLimiter.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/AbstractConcurrencyLimiter.java index fdc3c4c4..c6463726 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/AbstractConcurrencyLimiter.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/AbstractConcurrencyLimiter.java @@ -30,4 +30,9 @@ public boolean acquire() { * @return true if the acquisition is successful, false otherwise. */ protected abstract boolean doAcquire(); + + @Override + public void complete() { + } + } diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiter.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiter.java index 45ba202c..a7818094 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiter.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiter.java @@ -25,5 +25,5 @@ */ public interface ConcurrencyLimiter extends Licensee { - + void complete(); } diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/filter/inbound/ConcurrencyLimitFilter.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/filter/inbound/ConcurrencyLimitFilter.java index 82ff262e..d757196b 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/filter/inbound/ConcurrencyLimitFilter.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/filter/inbound/ConcurrencyLimitFilter.java @@ -31,6 +31,7 @@ import com.jd.live.agent.governance.policy.service.limit.ConcurrencyLimitPolicy; import com.jd.live.agent.governance.request.ServiceRequest.InboundRequest; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.CompletionStage; @@ -65,6 +66,7 @@ public void initialize() { public CompletionStage filter(InboundInvocation invocation, InboundFilterChain chain) { ServicePolicy servicePolicy = invocation.getServiceMetadata().getServicePolicy(); List concurrencyLimitPolicies = servicePolicy == null ? null : servicePolicy.getConcurrencyLimitPolicies(); + List limiters = new ArrayList<>(); if (null != concurrencyLimitPolicies && !concurrencyLimitPolicies.isEmpty()) { for (ConcurrencyLimitPolicy policy : concurrencyLimitPolicies) { // match logic @@ -75,10 +77,17 @@ public CompletionStage filter(InboundInvocati "The request is rejected by concurrency limiter. maxConcurrency=" + policy.getMaxConcurrency()); } + if (limiter != null) { + limiters.add(limiter); + } } } } - return chain.filter(invocation); + return chain.filter(invocation).whenComplete((o, throwable) -> { + for (ConcurrencyLimiter limiter : limiters) { + limiter.complete(); + } + }); } /** diff --git a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/concurrencylimit/resilience4j/Resilience4jConcurrencyLimiter.java b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/concurrencylimit/resilience4j/Resilience4jConcurrencyLimiter.java index cfeeada6..59a1cb82 100644 --- a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/concurrencylimit/resilience4j/Resilience4jConcurrencyLimiter.java +++ b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/concurrencylimit/resilience4j/Resilience4jConcurrencyLimiter.java @@ -50,4 +50,9 @@ public Resilience4jConcurrencyLimiter(ConcurrencyLimitPolicy policy) { public boolean doAcquire() { return bulkhead.tryAcquirePermission(); } + + @Override + public void complete() { + bulkhead.onComplete(); + } } diff --git a/joylive-plugin/joylive-transmission/joylive-transmission-springweb5/src/main/java/com/jd/live/agent/plugin/transmission/springweb/v5/definition/BodyInserterRequestDefinition.java b/joylive-plugin/joylive-transmission/joylive-transmission-springweb5/src/main/java/com/jd/live/agent/plugin/transmission/springweb/v5/definition/BodyInserterRequestDefinition.java index 75cb9607..a9a00084 100644 --- a/joylive-plugin/joylive-transmission/joylive-transmission-springweb5/src/main/java/com/jd/live/agent/plugin/transmission/springweb/v5/definition/BodyInserterRequestDefinition.java +++ b/joylive-plugin/joylive-transmission/joylive-transmission-springweb5/src/main/java/com/jd/live/agent/plugin/transmission/springweb/v5/definition/BodyInserterRequestDefinition.java @@ -34,7 +34,7 @@ * @since 1.6.0 */ @Injectable -@Extension(value = "BodyInserterRequestDefinition", order = PluginDefinition.ORDER_TRANSMISSION) +@Extension(value = "BodyInserterRequestDefinition_v5", order = PluginDefinition.ORDER_TRANSMISSION) @ConditionalOnTransmissionEnabled @ConditionalOnClass(BodyInserterRequestDefinition.TYPE_BODY_INSERTER_QUEST) public class BodyInserterRequestDefinition extends PluginDefinitionAdapter {