You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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注解,步骤如下:

  1. 确认依赖已正确引入
    Gradle依赖:
    implementation("io.micronaut.resilience4j:micronaut-resilience4j")
    
    Maven依赖:
    <dependency>
        <groupId>io.micronaut.resilience4j</groupId>
        <artifactId>micronaut-resilience4j</artifactId>
    </dependency>
    
  2. 在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";
        }
    }
    
  3. 配置限流规则
    在application.yml中定义对应实例的限流参数:
    resilience4j.ratelimiter:
      instances:
        exampleRateLimiter:
          limit-for-period: 10
          limit-refresh-period: 1s
          timeout-duration: 0
    

内容的提问来源于stack exchange,提问作者JavaStan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:25:54