package com.iailab.framework.env.core.fegin; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties; import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; /** * 多环境的 {@link LoadBalancerClientFactory} 实现类 * 目的:在创建 {@link ReactiveLoadBalancer} 时,会额外增加 {@link EnvLoadBalancerClient} 代理,用于 tag 过滤服务实例 * * @author iailab */ public class EnvLoadBalancerClientFactory extends LoadBalancerClientFactory { public EnvLoadBalancerClientFactory(LoadBalancerClientsProperties properties) { super(properties); } @Override public ReactiveLoadBalancer getInstance(String serviceId) { ReactiveLoadBalancer reactiveLoadBalancer = super.getInstance(serviceId); // 参考 {@link com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancerClientConfiguration#nacosLoadBalancer(Environment, LoadBalancerClientFactory, NacosDiscoveryProperties)} 方法 return new EnvLoadBalancerClient(super.getLazyProvider(serviceId, ServiceInstanceListSupplier.class), serviceId, reactiveLoadBalancer); } }