diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/metadata/LaneMetadata.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/metadata/LaneMetadata.java index 80e748af5..7ed6cc49b 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/metadata/LaneMetadata.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/metadata/LaneMetadata.java @@ -5,12 +5,14 @@ import com.jd.live.agent.governance.policy.lane.LaneSpace; import lombok.Builder; import lombok.Getter; +import lombok.ToString; /** * The {@code LaneMetadata} class encapsulates the metadata for a lane request. */ @Getter @Builder +@ToString public class LaneMetadata { /** diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractRateLimiterGroup.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractRateLimiterGroup.java index 45adadc95..b82b9bee9 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractRateLimiterGroup.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractRateLimiterGroup.java @@ -43,6 +43,13 @@ public abstract class AbstractRateLimiterGroup extends AbstractRateLimiter { */ public AbstractRateLimiterGroup(RateLimitPolicy policy) { super(policy, TimeUnit.NANOSECONDS); + } + + /** + * Initializes the rate limiter group by creating the individual rate limiters + * based on the sliding windows defined in the rate limit policy. + */ + public void init() { int i = 0; for (SlidingWindow window : policy.getSlidingWindows()) { limiters.add(create(window, policy.getName() + "-" + i++)); diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/leakybucket/LeakyBucketLimiterGroup.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/leakybucket/LeakyBucketLimiterGroup.java index 38e8eec07..e9a197340 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/leakybucket/LeakyBucketLimiterGroup.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/leakybucket/LeakyBucketLimiterGroup.java @@ -29,6 +29,7 @@ public class LeakyBucketLimiterGroup extends AbstractRateLimiterGroup { public LeakyBucketLimiterGroup(RateLimitPolicy policy) { super(policy); + init(); } @Override diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothBurstyLimiterGroup.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothBurstyLimiterGroup.java index d275b10de..f3bfa0371 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothBurstyLimiterGroup.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothBurstyLimiterGroup.java @@ -29,6 +29,7 @@ public class SmoothBurstyLimiterGroup extends AbstractRateLimiterGroup { public SmoothBurstyLimiterGroup(RateLimitPolicy policy) { super(policy); + init(); } @Override diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothWarmupLimiterGroup.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothWarmupLimiterGroup.java index 4b94e2872..c0152ae90 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothWarmupLimiterGroup.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/tokenbucket/SmoothWarmupLimiterGroup.java @@ -29,6 +29,7 @@ public class SmoothWarmupLimiterGroup extends AbstractRateLimiterGroup { public SmoothWarmupLimiterGroup(RateLimitPolicy policy) { super(policy); + init(); } @Override diff --git a/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-consumer/src/main/java/com/jd/live/agent/demo/grpc/consumer/controller/UserServiceController.java b/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-consumer/src/main/java/com/jd/live/agent/demo/grpc/consumer/controller/UserServiceController.java index 80aab3f33..63deb1715 100644 --- a/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-consumer/src/main/java/com/jd/live/agent/demo/grpc/consumer/controller/UserServiceController.java +++ b/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-consumer/src/main/java/com/jd/live/agent/demo/grpc/consumer/controller/UserServiceController.java @@ -77,7 +77,13 @@ public String get(@RequestParam("id") Integer id, HttpServletRequest servletRequ default: servletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); } - return status.getDescription(); + return status.getDescription() == null ? "Unknown error" : status.getDescription(); + } catch (IllegalStateException e) { + servletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); + return e.getMessage(); + } catch (Exception e) { + servletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); + return e.getMessage(); } } diff --git a/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-provider/src/main/java/com/jd/live/agent/demo/grpc/provider/service/UserServiceGrpcImpl.java b/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-provider/src/main/java/com/jd/live/agent/demo/grpc/provider/service/UserServiceGrpcImpl.java index 2d2fd02e2..3eccc4362 100644 --- a/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-provider/src/main/java/com/jd/live/agent/demo/grpc/provider/service/UserServiceGrpcImpl.java +++ b/joylive-demo/joylive-demo-grpc/joylive-demo-grpc-provider/src/main/java/com/jd/live/agent/demo/grpc/provider/service/UserServiceGrpcImpl.java @@ -32,6 +32,13 @@ public void get(UserGetRequest request, StreamObserver response responseObserver.onError(new RuntimeException("error")); return; } + if (request.getId() >= 100) { + try { + Thread.sleep(request.getId()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } UserGetResponse.Builder builder = UserGetResponse.newBuilder(); builder.setId(request.getId()) .setName("index:" + request.getId() + ", time:" + System.currentTimeMillis()) diff --git a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-redisson/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/redisson/RedissonRateLimiterGroup.java b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-redisson/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/redisson/RedissonRateLimiterGroup.java index d8aa46129..ed0bc210a 100644 --- a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-redisson/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/redisson/RedissonRateLimiterGroup.java +++ b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-redisson/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/redisson/RedissonRateLimiterGroup.java @@ -33,6 +33,7 @@ public class RedissonRateLimiterGroup extends AbstractRateLimiterGroup { public RedissonRateLimiterGroup(RedisClientManager manager, RateLimitPolicy policy) { super(policy); this.manager = manager; + init(); } @Override diff --git a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/resilience4j/Resilience4jRateLimiterGroup.java b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/resilience4j/Resilience4jRateLimiterGroup.java index 5e643d101..968c07d99 100644 --- a/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/resilience4j/Resilience4jRateLimiterGroup.java +++ b/joylive-implement/joylive-flowcontrol/joylive-flowcontrol-resilience4j/src/main/java/com/jd/live/agent/implement/flowcontrol/ratelimit/resilience4j/Resilience4jRateLimiterGroup.java @@ -29,6 +29,7 @@ public class Resilience4jRateLimiterGroup extends AbstractRateLimiterGroup { public Resilience4jRateLimiterGroup(RateLimitPolicy policy) { super(policy); + init(); } @Override