自定义 Router

SOFA-RPC 中对服务地址的选择也抽象为了一条处理链,由每一个 Router 进行处理。同 Filter 一样, SOFA-RPC 对 Router 提供了同样的扩展能力。

  1. @Extension(value = "customerRouter")
  2. @AutoActive(consumerSide = true)
  3. public class CustomerRouter extends Router {
  4. @Override
  5. public void init(ConsumerBootstrap consumerBootstrap) {
  6. }
  7. @Override
  8. public boolean needToLoad(ConsumerBootstrap consumerBootstrap) {
  9. return ture;
  10. }
  11. @Override
  12. public List<ProviderInfo> route(SofaRequest request, List<ProviderInfo> providerInfos) {
  13. return providerInfos;
  14. }

新建扩展文件 META-INF/services/sofa-rpc/com.alipay.sofa.rpc.client.Router 。内容如下:

  1. customerRouter=com.alipay.sofa.rpc.custom.CustomRouter

如上自定义了一个 CustomerRouter ,生效于所有消费者。其中 init 参数 ConsumerBootstrap 是引用服务的包装类,能够拿到 ConsumerConfig ,代理类,服务地址池等对象。 needToLoad 表示是否生效该 Router , route 方法即筛选地址的方法。