Micronaut集成Resilience4j RateLimiter时Bean注入失败问题
Micronaut集成Resilience4j:Bean注入错误修复与Controller注解使用说明
一、修复EventConsumerRegistry<RateLimiterEvent> Bean缺失错误
出现该错误是因为Micronaut Resilience4j集成默认需要事件消费者Bean处理限流事件,可通过两种方式解决:
- 方式1:禁用事件消费者自动配置
在application.yml中添加以下配置:resilience4j.ratelimiter: event-consumer-registry: enabled: false - 方式2:手动提供空实现Bean
创建一个空的事件消费者注册表Bean,不处理任何限流事件:import io.github.resilience4j.consumer.EventConsumerRegistry; import io.github.resilience4j.ratelimiter.event.RateLimiterEvent; import jakarta.inject.Singleton; @Singleton public class EmptyRateLimiterEventRegistry implements EventConsumerRegistry<RateLimiterEvent> { @Override public EventConsumer<RateLimiterEvent> getEventConsumer(String name) { return event -> {}; } @Override public void addEventConsumer(String name, EventConsumer<RateLimiterEvent> eventConsumer) { // 空实现 } }
二、是否必须使用Service?能否直接在Controller上应用注解?
不需要强制使用Service,完全可以直接在Micronaut Controller的方法上应用Resilience4j注解,步骤如下:
- 确认依赖已正确引入
Gradle依赖:
Maven依赖:implementation("io.micronaut.resilience4j:micronaut-resilience4j")<dependency> <groupId>io.micronaut.resilience4j</groupId> <artifactId>micronaut-resilience4j</artifactId> </dependency> - 在Controller方法上添加注解
直接在Controller的请求处理方法上标注@RateLimiter并指定实例名称:import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import io.github.resilience4j.ratelimiter.annotation.RateLimiter; @Controller("/api") public class ExampleController { @Get("/example") @RateLimiter(name = "exampleRateLimiter") public String example() { return "Hello World"; } } - 配置限流规则
在application.yml中定义对应实例的限流参数:resilience4j.ratelimiter: instances: exampleRateLimiter: limit-for-period: 10 limit-refresh-period: 1s timeout-duration: 0
内容的提问来源于stack exchange,提问作者JavaStan
相关产品推荐
相关产品推荐

