Custom Rate Limiter
Explanation#
Before custom development, please customize and build the gateway environment first, please refer to: custom deployment.
This article describes how to customize the extension of
org.apache.shenyu.plugin.ratelimiter.algorithm.RateLimiterAlgorithm.
Extension#
- Create a new project and introduce the following dependencies:
<dependencies> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-plugin-base</artifactId> <version>${project.version}</version> </dependency></dependencies>- Create a new class
${you class}, implementsorg.apache.shenyu.plugin.ratelimiter.algorithm.RateLimiterAlgorithm
public class ${you class} implements RateLimiterAlgorithm<T> { /** * Gets script. * * @return the script */ public RedisScript<T> getScript() { //coding and return } /** * Gets keys. * * @param id the id * @return the keys */ public List<String> getKeys(String id) { //coding and return } /** * Callback string. * * @param script the script * @param keys the keys * @param scriptArgs the script args */ public void callback(final RedisScript<?> script, final List<String> keys, final List<String> scriptArgs) { //coding and return }}- In the project
resourcesdirectory,Create a newMETA-INF/shenyudirectory, and the new file name is :org.apache.shenyu.plugin.ratelimiter.algorithm.RateLimiterAlgorithm. add${you spi name}=${you class path}:
${you spi name} = ${you class path}Package the project and copy it to the
liborext-libdirectory of the gateway (bootstrap-bin).In the
Adminservice ---> BasicConfig ---> Dictionary , Find the dictionary code asALGORITHM_*, add a new piece of data, pay attention to the dictionary name:${you spi name}.

- Or execute the following custom
SQLstatement:
INSERT IGNORE INTO `shenyu_dict` ( `id`, `type`, `dict_code`, `dict_name`, `dict_value`, `desc`, `sort`, `enabled`, `date_created`, `date_updated` )VALUES ( 'you id', 'matchMode', 'MATCH_MODE', 'you spi name', 'you value', 'you spi name', 0, 1, '2021-08-30 19:29:10', '2021-08-30 20:15:23' );