当前位置: 首页 > 知识库问答 >
问题:

无法让Resilience4j@RateLimiter与Spring Boot一起工作

邰宇
2023-03-14
@Log4j2
@Component
class Resilience4jDemo implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        for (int i = 0; i < 100; i++) {
            callBackendA();
        }
    }

    @RateLimiter(name = "backendA")
    private void callBackendA() {
        log.info("Calling ");
    }
}
resilience4j.ratelimiter:
  instances:
    backendA:
      limitForPeriod: 1
      limitRefreshPeriod: 10s
      timeoutDuration: 0
<!-- https://mvnrepository.com/artifact/io.github.resilience4j/resilience4j-spring-boot2 -->
<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot2</artifactId>
    <version>1.7.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.6.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>2.6.0</version>
</dependency>

共有1个答案

宁锐
2023-03-14

我没有使用Resilience4j的经验,但看起来您正在尝试使用spring-aop。这与运行时生成的代理一起工作,该代理包装了原始类,提供了额外的功能(在本例中是速率限制)。

如果是,则不能注释类的私有方法,因为它不会被代理生成机制检测和处理。

相反,考虑创建另一个bean,并将其功能公开为公共方法:

public interface Backend {
   void callBackendA();
}

@Component // this is a spring bean!
@Log4j2
public class LoggingBackendImpl implements Backend {
   @RateLimiter(name = "backendA")
   public void callBackendA() {
      log.info("calling backend");
   }
}


@Component
class Resilience4jDemo implements CommandLineRunner {
    @Autowired
    Backend backend;  // this has to be managed by spring 

    @Override
    public void run(String... args) throws Exception {
        for (int i = 0; i < 100; i++) {
            backend.callBackendA();
        }
    }
}
 类似资料:
  • 我正在编写一个Web项目,它使用了Apache Tomcat 5.0和JDK 1.4.2之上的Spring框架2.5。 当Tomcat启动时,它从未加载Spring。 Web.xml如下: "web-Application ationContext.xml"就像: 控制台提供了以下日志堆栈跟踪: 严重:配置类org的应用程序侦听器时出错。springframework。网状物上下文ContextL

  • 我正在做一个React AMP项目,我需要用AMP做一些调整动画来显示和隐藏窗口滚动时的按钮。 As AMP动画标记希望在

  • 因此,如果我不能重写字符串作为它的最终结果(因此阻止我重写它的compareTo()方法来调用compareToIgnoreCase()),那么还有其他方法可以实现吗? 任何帮助都是非常感谢的。

  • 我已经成功地在我的Windows机器上安装了gnuradio,并尝试将随附的python环境(Python 2.7)与PyCharm v2018集成。我创建了一个新项目,并为包添加了一个用户定义的路径,以指向所有gnuradio库的位置(C:\Program Files\GNURadio-3.7\lib\site-包)。 在Pycharm可以毫无怨言地看到所有gnuradio包的意义上,一切似乎都

  • 我已经成功地建立了TailwindCSS上Gridsome以下说明:https://gridsome.org/docs/assets-css/#tailwind 但是,这些说明并没有提到如何设置autoprefixer。因此,我自己尝试了一下,如下所示: npm安装自动刷新器 修改了文件(请参见下面的修改代码,其中包含我所更改内容的注释) 运行 将类添加到以查看是否添加了任何供应商前缀 结果。。。

  • 我试图在一个我的组件中使用Tesseract来执行文件上的ocr。 .ts: .html 我遵循了这个,但是这个错误显示了 我应该怎么做才能让这个工作成功?