目录
1.修改pom.xml,禁用ribbon,引入loadbalancer依赖
一、引入依赖
ribbon是客户端负载均衡的实现方案。
nacos已经集成ribbon,不需要单独引入依赖。
二、使用
1.通过config类
新建配置类,并application添加注解(见下图注释掉的代码)。
package com.wind.ribbon;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author dongguanghui
* @date 2023/5/17 15:15
*/
@Configuration
public class RibbonRandomRuleConfig {
// 方法名一定要是iRule
@Bean
public IRule iRule(){
return new RandomRule();
}
}
2.通过yml配置
如果使用自带策略,直接写类名。
如果使用自定义策略,需要实现自定义策略。
自定义策略代码示例(需要继承AbstractLoadBalancerRule)。
package com.wind.ribbon.rule;
import com.alibaba.nacos.client.naming.utils.ThreadLocalRandom;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;
import java.util.List;
/**
* 方式三 自定义负载均衡策略
* @author dongguanghui
* @date 2023/5/17 15:53
*/
public class CustomRule extends AbstractLoadBalancerRule {
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
public Server choose(Object key) {
// 获得当前请求的服务实例
ILoadBalancer loadBalancer = this.getLoadBalancer();
List<Server> reachableServers = loadBalancer.getReachableServers();
int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
Server server = reachableServers.get(random);
return server;
}
}
三、懒加载
默认懒加载,第一次调用接口才会加载。
可配置饥饿加载,即服务启动就加载,可避免第一次调用可能出现的加载时长问题。
四、用loabalancer代替ribbon
1.修改pom.xml,禁用ribbon,引入loadbalancer依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>alibaba</artifactId> <groupId>com.wind.springcloud</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>order-loadbalancer</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- nacos服务注册发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <!-- 去除ribbon--> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加loadbalancer依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> </dependencies> </project>
2.yml中禁用loadbalancer集成的ribbon