本文最后更新于299 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
OpenFeign发起远程调用的核心流程
- 获取请求中的
serviceId
- 根据
serviceId
负载均衡,找出一个可用的服务实例 - 利用服务实例的
ip
和port
信息重构url - 向真正的url发起请求
RoundRobinLoadBalancer
是轮询算法,RandomLoadBalancer
是随机算法,NacosLoadBalancer
是集群优先
修改负载均衡
public class OpenFeignConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(
Environment environment, NacosDiscoveryProperties properties,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new NacosLoadBalancer(
loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name, properties);
}
}
这个配置类千万不要加@Configuration
注解,也不要被SpringBootApplication扫描到。
有两种做法:
- 全局配置:对所有服务生效
@LoadBalancerClients(defaultConfiguration = OpenFeignConfig.class)
- 局部配置:只对某个服务生效
@LoadBalancerClients({
@LoadBalancerClient(value = "item-service", configuration = OpenFeignConfig.class)
})