Bucket4j适配GaussDB开源验证总结

举报
yd_255530874 发表于 2024/12/05 18:48:27 2024/12/05
【摘要】 Bucket4j 是一个基于令牌桶算法的Java限流库 ,可灵活控制资源访问速率,保护系统资源并提升用户体验,本文提供了一种使用GaussDB存储令牌信息的方法

Bucket4j 是一个用于 Java 的强大速率限制库,可灵活控制资源访问速率,保护系统资源并提升用户体验。 主要功能

  • Bucket4j 是一个 Java 速率限制库,用于控制对资源的访问速率。它可以限制在特定时间内对某个操作的执行次数,确保系统资源不被过度消耗。
  • 提供多种速率限制策略,如固定速率限制、弹性速率限制等。可以根据不同的业务需求选择合适的限制策略。
  • 支持分布式环境下的速率限制,可以通过外部存储(如数据库、缓存等)来实现跨多个节点的统一速率限制。

提供简洁的 API,易于集成到现有的 Java 应用程序中。

bucket4j集成过程

1. 下载 OpenSourceForHuaweiDemoJava 项目,并新建bucket4j分支

2. 在resource-server的pom中引入依赖部分依赖如下图

3. 配置 application.yml,添加数据库和bucket4j配置,bucket4j配置如下:

4. 配置Bucket,关键代码如下

5. 配置Filter

开始采用spring boot中Filter的用法,集成后发现拦截不生效,查看项目后,要采用Apache servicecombFilter的用法,改正后的关键代码如下:

6. 创建数据库及表

1. 创建SCHEMA: bucket4j

2. 创建表:CREATE TABLE IF NOT EXISTS bucket(id SERIAL8 PRIMARY KEY, state BYTEA, expires_at BIGINT);


DEMO验证过程

1. 编写验证接口参考Apache servicecomb框架,在项目中新建Bucket4jDemoService接口及实现

2. 部署DEMO

3. 接口验证,浏览器访问 edge-service提供的访问地址

1. 接口验证

 删除pom中bucket4j的postgresql依赖,将该模块的文件复制到resource-server中,修改源码中的语句insertSqlQuery修改后如下

并重新部署



连续请求该接口,会报错:如下图,等5秒再请求,又可以正常请求

根据trace id参看错误日志

2. 数据库


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。