自定义Ribbon
1、自定义类继承AbstractLoabBalancerRule
package com.lemon.alibaba.bean;
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;
import java.util.concurrent.ThreadLocalRandom;
public class CustomRule extends AbstractLoadBalancerRule {
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
// 实现负载均衡自定义算法
// 示例实现随机策略
@Override
public Server choose(Object o) {
//1、获取当前请求服务的示例
ILoadBalancer loadBalancer = this.getLoadBalancer();
//2、获取服务的实例列表,即多个实例
List<Server> servers= loadBalancer.getReachableServers();
// 3、 获取随机数
int random = ThreadLocalRandom.current().nextInt(servers.size());
//4、获取返回的示例
Server server = servers.get(random);
return server;
}
}
2、在配置类中配置自定义的负载均衡,并且在启动类中配置自定义的配置类 。见(二)
使用LoadBalancer替换Ribbon(暂时不使用)
1、加载依赖项
<dependencies>
<!-- LoadBalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 提供了RestTemplate支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos服务注册与发现 移除ribbon支持,nacos-discovery中引入了ribbon,需要移除ribbon的包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
在依赖项中移除ribbon或者在配置项目中禁用ribbon
spring:
application:
name: lemon-loadbalancer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
# 不使用ribbon
loadbalancer:
ribbon:
enabled: false
2、其他配置与原有的ribon配置一致,不变化