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

Spring启动(.2.3.0. RELEASE),带桶4j速率限制不工作

酆俊远
2023-03-14

我正试图使用极限速率API来实现Spring Boot Rest应用程序,bucket4j基于以下在线资源

请在下面找到我的配置:

下面是为使用4bucketj而添加的maven依赖项:

...
    <dependency>
            <groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
            <artifactId>bucket4j-spring-boot-starter</artifactId>
            <version>0.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
..

以下是我的application.yml配置:

spring:
  main:
    allow-bean-definition-overriding: true
  cache:
    jcache:
      config: classpath:ehcache.xml
bucket4j:
  enabled: true
  filters:
    - cache-name: buckets
      url: .*
      http-response-body: "{ \"status\": 429, \"error\": \"Too Many Requests\", \"message\": \"You have exhausted your API Request Quota\" }"
      rate-limits:
        - bandwidths:
            - capacity: 2
              time: 1
              unit: minutes

下面我添加了ehcache。路径src/main/resources/中的xml:

<config xmlns='http://www.ehcache.org/v3'
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
                            http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
    <cache alias="buckets">
        <expiry>
            <ttl unit="seconds">3600</ttl>
        </expiry>
        <heap unit="entries">1000000</heap>
        <jsr107:mbeans enable-statistics="true"/>
    </cache>

最后,我在一个配置类中添加了EnableCaching,该类在spring启动时加载。

基于应用程序中的配置。yml文件API不应在一分钟内接受超过2个请求,如果超过两个请求,则应按照application.yml中的说明(http响应体)触发错误。

我已经在我的电脑上部署了应用程序,使用Postman工具,我能够在一分钟内点击Rest API超过10次,并且没有错误消息。

谁能告诉我为什么没有触发错误消息,因为它应该只允许2个请求,而我只发送10个?


共有1个答案

卓星波
2023-03-14

我通过从第6点开始遵循本指南使其工作,但我可以发现与您的实现的唯一区别是缓存系统,因此我可以猜测问题出在那里。

 类似资料:
  • 我不能玩春云之门的限速器。我在这里配置网关: 我使用JMeter调用API循环1000次,但网关没有响应429响应中的请求太多。我哪里错了?

  • 有人能详细说明酒吧/子系统实施的动态费率限制吗?我在gcloud文档或faq页面上找不到任何细节。 下面是我的pubsub用法:我计划在我们的生产中使用pubsub。现在,我有1个主题、1个订阅和1个订阅者(Webhook HTTPS回调)。有时我的订阅者可能会抛出异常(非常少),在这种情况下,我的订阅者将返回一个400响应给pubsub,以便pubsub可以保留消息并重试。 如果pubsub从用

  • 速率限制配置参考 filter.http.RateLimit filter.http.RateLimit proto { "domain": "...", "stage": "...", "request_type": "...", "timeout": "{...}" } domain (string, REQUIRED) 需要调用速率限制服务时的域。 stage (uint3

  • 速率限制配置参考。 filter.network.RateLimit filter.network.RateLimit proto { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout": "{...}" } stat_prefix (string, REQUIRED) 发布统计信息时使用的前缀。

  • 速率限制配置概述。 { "name": "rate_limit", "config": { "domain": "...", "stage": "...", "request_type": "...", "timeout_ms": "..." } } domain (required, string) 调用速率限制服务时使用的域。 stage (opt

  • 速率限制配置参考。 { "name": "ratelimit", "config": { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout_ms": "..." } } stat_prefix (required, string) 发布统计信息时使用的前缀。 domai