spring-cloud-loadbalancer模块中有一个自动配置类,其中定义了默认的负载均衡器:

这个bean上添加了@conditionalonmissingbean注解,也就是说如果我们自定义了这个类型的bean,则负载均衡的策略就会被改变。没有自定义时,默认采用轮询算法进行负载均衡。
在微服务中添加一个配置类
示例代码如下:
import com.alibaba.cloud.nacos.nacosdiscoveryproperties;
import com.alibaba.cloud.nacos.loadbalancer.nacosloadbalancer;
import org.springframework.cloud.client.serviceinstance;
import org.springframework.cloud.loadbalancer.core.reactorloadbalancer;
import org.springframework.cloud.loadbalancer.core.serviceinstancelistsupplier;
import org.springframework.cloud.loadbalancer.support.loadbalancerclientfactory;
import org.springframework.context.annotation.bean;
import org.springframework.core.env.environment;
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 注解,若配置类加 @configuration 并被扫描,会强制全局生效,所有 feign 客户端只能用这一种策略,无法为不同服务定制
用 @loadbalancerclients 指定配置,既能设为全局默认(对所有远程服务生效),也能针对特定服务单独配置不同策略
好处是灵活,比如调用服务 a 用 nacos 负载均衡,调用服务 b 用随机策略,通过这种方式能精准控制,避免策略冲突,适应不同服务的调用需求。
我们要在启动类上通过注解来声明这个配置。
有两种做法:
- 全局配置:对所有服务生效
@loadbalancerclients(defaultconfiguration = openfeignconfig.class)
- 局部配置:只对某个服务生效
@loadbalancerclients({
@loadbalancerclient(value = "item-service", configuration = openfeignconfig.class)
})当前该负载均衡算法只会在当前微服务调用item-service时生效
到此这篇关于springcloud修改openfeign的负载均衡算法的实现步骤的文章就介绍到这了,更多相关springcloud openfeign的负载均衡算法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论