一、负载均衡
创建ribbon-consumer
pom
<?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>springCloud-demo</artifactId> <groupId>com.badcat</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.badcat</groupId> <artifactId>ribbon-consumer</artifactId> <packaging>jar</packaging> <name>ribbon-consumer</name> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> </dependencies> </project>
application.properties
spring.application.name=ribbon-consumer server.port=31000 eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/
启动类(注意@LoadBalanced)
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; /** * @author badcat * @date 2020-03-01 15:42 */ @SpringBootApplication @EnableDiscoveryClient public class RibbonConsumerApplication { @Bean @LoadBalanced public RestTemplate template(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonConsumerApplication.class, args); } }
controller
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * @author badcat * @date 2020-04-12 1:20 */ @RestController public class Controller { @Autowired private RestTemplate restTemplate; @GetMapping("/sayHi") public String sayHi(){ return restTemplate.getForObject("http://eureka-client/sayHi",String.class); } }
创建两个spring.application.name相同的服务eureka-client、eureka-client2,端口被分别是30000、30001,配置略,参考上一篇eureka-client的配置
启动注册中心、eureka-client、eureka-client2、ribbon-consumer,打开注册中心页面,如图,说明eureka-client是集群了。

多次调用ribbon-consumer的sayHi 接口,查看结果,30000和30001交替返回,说明ribbon的负载均衡成功


二、负载均衡策略
上一步骤中的轮询策略实际上是轮询。
1、全局负载均衡策略修改,就是ribbon访问任何一个服务集群时都遵循的策略
我们改成随机策略,在ribbon-consumer模块中新建一个类,启动该模块,多次调用接口,发现返回的没有规律。
import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author badcat * @date 2020-04-12 2:26 */ @Configuration public class RibbonConfiguration { @Bean public IRule defaultLBDStrategy(){ return new RandomRule(); } }
2、局部负载均衡策略修改,就是可以对不同的服务集群做不同的策略配置
第一种方式,修改application.properties,添加如下配置
#针对eureka-client服务集群的负载均衡策略的配置
eureka-client.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
第二种方式,添加注解@RibbonClient。注解优先级高于配置文件
import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.context.annotation.Configuration; /** * @author badcat * @date 2020-04-12 2:26 */ @Configuration @RibbonClient(name = "eureka-client", configuration = com.netflix.loadbalancer.RandomRule.class) public class RibbonConfiguration { }
原文:https://www.cnblogs.com/hmxs/p/12684084.html