自定义 LoadBalancer

说明

自定义注册中心的实现类可参考 com.alipay.sofa.rpc.client.lb.RandomLoadBalancer

自定义负载均衡的流程如下:

实现自定义负载均衡

  1. 自定义负载均衡类。

    自定义负载均衡类时,需继承如下虚拟类:

    package com.alipay.sofa.rpc.client;
    
    public abstract class AbstractLoadBalancer extends LoadBalancer {
        protected abstract ProviderInfo doSelect(SofaRequest invocation, List<ProviderInfo> providerInfos);  //进行负载均衡 
    }
  2. 添加注解。

    示例如下:

    @Extension("shortestResponse")
    public class ShortestResponseLoadBalance extends AbstractLoadBalancer {

    @Extension("")用于指定负载均衡别名,可自定义。您可以在业务指定负载均衡算法时使用该别名。

将自定义负载均衡配置到 RPC 架构

基于 SOFARPC 的 SPI 机制,您需要新建扩展文件META-INF/services/sofa-rpc/com.alipay.sofa.rpc.client.LoadBalancer,将自定义的负载均衡类配置到 RPC 架构。内容示例如下:

shortestResponse=com.alipay.sofa.extend.loadbalance.ShortestResponseLoadBalance
image

在业务中使用自定义负载均衡

您可以在指定负载均衡算法时,使用自定义扩展的负载均衡别名。负载均衡算法及配置介绍请参见 负载均衡

配置示例如下:

<sofa:reference interface="com.example.demo.SampleService" id="sampleService">
  <sofa:binding.bolt>
    <sofa:global-attrs loadBalancer="shortestResponse"/>
  </sofa:binding.bolt>
</sofa:reference>