第一种方式 使用配置类
如果这个配置类使用@Configuration
注解并写在主启动类能够进行包扫描的范围中,那么调用其他微服务,一律使用这一种负载均衡算法。当然也可以写在主启动所在包的外面
配置类的内容如下:
package com.hs.rule;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: 将ribbon默认的负载均衡方式改为随机的
* @Author 胡尚
* @Date: 2022/6/9 11:10
* @Version 1.0
*/
@Configuration
public class MyRuleConfig {
@Bean
public IRule iRule(){
return new RandomRule();
}
}
然后在主启动类中指定调用某些服务的时候使用我们配置的负载均衡算法
@SpringBootApplication
// 如果只有一个服务就可以直接使用@RibbonClient注解,而不需要@RibbonClients。
// name是写服务提供方的服务名 configuration是指定我们上面创建的配置类
@RibbonClients(value = {
@RibbonClient(name = "stock-service", configuration = MyRuleConfig.class)
})
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
第二种方式 使用yaml配置
修改的这种负载均衡算法是使用nacos设置的权重方式
# 使用配置文件的方式修改ribbon默认的负载均衡算法
stock-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
接下来进行测试,首先在nacos管理平台上面修改订单服务stock的权重
然后再进行调用,就可以发现测试效果了。
如果要使用自定义的负载均算法,一般就自己创建一个类,然后继承AbstractLoadBalancerRule抽象类,然后写相应的负载均衡逻辑。最后再使用上面的两种方法,要么在配置类中创建该对象并注册进容器,要么在yml文件中指定全路径
版权声明:本文为qq_44027353原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。