{"id":19591511,"url":"https://github.com/wangzheng0822/ratelimiter4j","last_synced_at":"2025-05-16T14:04:47.061Z","repository":{"id":44130811,"uuid":"140144622","full_name":"wangzheng0822/ratelimiter4j","owner":"wangzheng0822","description":"Java rate limiting library/framework","archived":false,"fork":false,"pushed_at":"2023-02-20T06:14:22.000Z","size":93,"stargazers_count":962,"open_issues_count":8,"forks_count":380,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-05-16T14:04:33.916Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wangzheng0822.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-07-08T06:52:19.000Z","updated_at":"2025-05-15T07:52:52.000Z","dependencies_parsed_at":"2022-09-16T18:50:48.365Z","dependency_job_id":"baaeaf61-3cd8-4905-b78c-77faa2fbd271","html_url":"https://github.com/wangzheng0822/ratelimiter4j","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangzheng0822%2Fratelimiter4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangzheng0822%2Fratelimiter4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangzheng0822%2Fratelimiter4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangzheng0822%2Fratelimiter4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wangzheng0822","download_url":"https://codeload.github.com/wangzheng0822/ratelimiter4j/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254544146,"owners_count":22088807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T08:29:25.626Z","updated_at":"2025-05-16T14:04:47.042Z","avatar_url":"https://github.com/wangzheng0822.png","language":"Java","funding_links":[],"categories":["容错组件"],"sub_categories":[],"readme":"# Ratelimiter4j \n### Features\nRateLimiter是一个高度容错，低延迟，高性能的限流开发库/框架，提供了对HTTP接口的访问限流功能。其特点：\n* 提供了各种灵活的配置方式，同时支持零配置纯编程使用模式\n* 支持yaml, json等多种限流规则配置格式\n* 支持本地文件配置限流规则或者zookeeper集中配置方式\n* 使用SPI插件式开发模式，支持自定义限流规则格式，限流算法等\n* 提供了基于内存的单机限流算法和基于Redis的分布式限流算法\n* 高度容错，限流框架的任何异常都不会影响业务接口\n* 低延迟，限流框架较小影响业务接口响应时间\n* 支持不同粒度的接口限流，支持接口中包含restful url template variables\n* 灵活的集成方式，方便集成spring开发框架\n\n### Prerequisite\nRateLimit4J需要Java 8及以上版本\n\n### Building\n```shell\n$ git clone https://github.com/wangzheng0822/ratelimiter4j\n$ cd ratelimiter4j/\n$ gradle build\n```\n\n### Quickstart\n\n基于内存的限流，如果不需要特殊配置，使用起来非常简单，如下几行代码即可：\n```java\nUrlRateLimiter ratelimiter = new MemoryUrlRateLimiter();\ntry {\n  ratelimiter.limit(\"app-1\", \"http://www.eudemon.com/v1/user/12345\");\n  System.out.println(\"passed\");\n} catch (OverloadException e) {\n  // business logic\n} catch (InvalidUrlException e) {\n  // business logic\n} catch (InternalErrorException e) {\n  // business logic\n}\n```\n限流规则配置，放置在classpath下面：ratelimiter-rule.yaml\n```yaml\nconfigs:\n- appId: app-1\n  limits:\n  - api: /v1/user\n    limit: 100\n  - api: /v1/order\n    limit: 50\n- appId: app-2\n  limits:\n  - api: /v1/user\n    limit: 50\n  - api: /v1/order\n    limit: 50\n```\n\n基于Redis的分布式限流，如果不需要特殊设置，只需要简单配置一下Redis地址，如下：\n```java\nSystem.setProperty(\"ratelimiter.redis.address\", \"127.0.0.1:6379\");\nUrlRateLimiter ratelimiter = new DistributedUrlRateLimiter();\ntry {\n  ratelimiter.limit(\"app-1\", \"http://www.eudemon.com/v1/user/12345\");\n  System.out.println(\"passed\");\n} catch (OverloadException e) {\n  // business logic\n} catch (InvalidUrlException e) {\n  // business logic\n} catch (InternalErrorException e) {\n  // business logic\n}\n```\n限流规则配置，放置在classpath下面：ratelimiter-rule.yaml，同上面的相同\n\n### Documentation\n作者还写了一篇科普文章，发表于Infoq的架构公众号(聊聊架构)：[微服务接口限流的设计与思考](https://mp.weixin.qq.com/s?__biz=MzIwMzg1ODcwMw==\u0026mid=2247488188\u0026idx=1\u0026sn=9e77a94b271909fecba136baab66a722\u0026chksm=96c9a4dca1be2dcae2b1780cefaf22a6b6db4ecbe46357cf9e66dd3635db31bd3fea29414c36#rd)\n\n更加详细配置及其使用方法及其examples，请参看[User Guide开发手册](https://github.com/wangzheng0822/ratelimiter/wiki/1.-User-Guide%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C \"User Guide开发手册\")\n \n使用前请先确认性能是否满足应用场景，请务必阅读[Benchmark性能测试报告](https://github.com/wangzheng0822/ratelimiter/wiki/2.-Benchmark%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A)\n\n必要情况下请参照测试文档和benchmark code自行测试[RateLimiterBenchmarkTest.java](https://github.com/wangzheng0822/ratelimiter/blob/master/src/test/java/com/eudemon/ratelimiter/benchmark/RateLimiterBenchmarkTest.java)\n\n\n### Roadmap\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e功能\u003c/td\u003e\n    \u003ctd\u003e优先级\u003c/td\u003e\n    \u003ctd\u003e进度\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e分布式限流算法支持Redis cluster \u0026 sharding\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持limit接口超时参数\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e限流规则支持指定time unit\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003ein progress\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持不区分app ID的限流模式\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003ein progress\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持线程并发限制\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e限流规则支持GET/POST等http schema\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003ein progress\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e分布式限流算法性能优化\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持黑白名单和鉴权功能\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持更多的限流算法\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持更加通用的限流：db,业务,dubbo等\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e支持可以任意指定rule存放的位置file\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003ein progress\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e添加更加完善的监控\u003c/td\u003e\n    \u003ctd\u003ep1\u003c/td\u003e\n    \u003ctd\u003e未开发\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangzheng0822%2Fratelimiter4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwangzheng0822%2Fratelimiter4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangzheng0822%2Fratelimiter4j/lists"}