自定义负载均衡策略

本文介绍如何对 org.apache.shenyu.loadbalancer.spi.LoadBalancer 进行自定义扩展。

  • 新增一个类 CustomLoadBalancer,继承org.apache.shenyu.loadbalancer.spi.AbstractLoadBalancer
  1. public class CustomLoadBalancer extends AbstractLoadBalancer {
  2. @Override
  3. public Upstream doSelect(final List<Upstream> upstreamList, final String ip) {
  4. // 自定义负载均衡实现逻辑
  5. }
  6. }
  • org.apache.shenyu.loadbalancer.spi.LoadBalancer文件中添加如下内容:
  1. ${spi name}=${custom class path}

${spi name}表示spi的名称,${custom class path}表示该类的全限定名。比如:

  1. custom=org.apache.shenyu.loadbalancer.spi.CustomLoadBalancer
  • org.apache.shenyu.common.enums.LoadBalanceEnum 类中添加枚举类型:
  1. /**
  2. * Custom load balance enum.
  3. */
  4. CUSTOM(4, "custom", true),
  • Apache ShenYu网关管理系统 —> 基础配置 —> 字典管理, 找到字典编码为 LOAD_BALANCE,新增一条数据,注意字典名称要为: ${spi name},图中的示例是custom

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

字典类型:loadBalance

字典编码:LOAD_BALANCE

字典名称:${spi name},填写自定义spi的名称;

字典值:使用时,下拉框的值,不要和现有的重复;

字典描述或备注信息:描述信息;

排序: 排序;

  • 在添加选择器或规则时,就可以使用自定义的匹配方式:

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