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'    );