自定义负载均衡策略

说明

  • 在自定义开发前,请先自定义搭建好网关环境,请参考: 自定义部署

  • 本文介绍如何对 org.apache.shenyu.plugin.divide.balance.LoadBalance 进行自定义扩展。

扩展实现

  • 新增一个类 ${you class},实现 org.apache.shenyu.plugin.divide.balance.LoadBalance
  1. public class ${you class} implements LoadBalance {
  2. /**
  3. * 从上游列表中选择一个服务返回
  4. *
  5. * @param upstreamList 上游列表
  6. * @param ip 请求的远程地址
  7. * @return divide upstream
  8. */
  9. @Override
  10. public DivideUpstream doSelect(final List<DivideUpstream> upstreamList,
  11. final String ip) {
  12. //开发你的选择逻辑,返回结果
  13. }
  14. }
  • 在项目 resources 目录下,新建 META-INF/shenyu 目录, 并且新增文件名为 : org.apache.shenyu.plugin.divide.balance.LoadBalance. 内容新增 ${you spi name} = ${you class path}:
  1. ${you spi name} = ${you class path}
  • Admin 后台 —-> 基础管理 —-> 字典管理 , 找到字典编码为 LOAD_BALANCE,新增一条数据,注意字典名称要为: ${you spi name}

自定义负载均衡策略 - 图1

  • 或者执行以下自定义SQL语句:
  1. INSERT IGNORE INTO `shenyu_dict` (
  2. `id`,
  3. `type`,
  4. `dict_code`,
  5. `dict_name`,
  6. `dict_value`,
  7. `desc`,
  8. `sort`,
  9. `enabled`,
  10. `date_created`,
  11. `date_updated`
  12. )
  13. VALUES (
  14. 'you id',
  15. 'matchMode',
  16. 'MATCH_MODE',
  17. 'you spi name',
  18. 'you value',
  19. 'you spi name',
  20. 0,
  21. 1,
  22. '2021-08-30 19:29:10',
  23. '2021-08-30 20:15:23'
  24. );