目录
Dubbo 提供了下面六种 Router 的实现类,由对应的RouterFactory 加载而来。
Router组件的作用
Router中存放了服务提供者列表,在消费者调用过程中,Directory获取可用服务列表时需要通过Router筛选出符合路由规则的服务提供者作为可用于本次调用的服务列表,即Invoker集合。
Router中的服务列表
在消费者启动或者注册中心providers节点刷新后,Directory会收到通知并把最新的服务列表转换为Invoker存放到RegistryDirectory实例的invokers和urlInvokerMap中及其AbstractDirectory父类的routerChain中。
这一过程的实现在 RegistryDirectory#refreshInvoker()方法中,具体是在setInvokers()中
public void setInvokers(List<Invoker<T>> invokers) {
this.invokers = (invokers == null ? Collections.emptyList() : invokers);
routers.forEach(router -> router.notify(this.invokers));
}