负载均衡之Ribbon简介
1.什么是负载均衡
2.Ribbon负载均衡
2.1 Ribbon 负载均衡策略
3.负载均衡不同方案的区别
4.Ribbon负载均衡策略设置
4.1 全局设置
@Bean public RandomRule randomRule() { return new RandomRule(); }
4.2局部设置
修改配置文件指定服务的负载均衡策略。
# 负载均衡策略 # service-provider 为调用的服务的名称 service-provider: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
5.Ribbon 点对点直连
点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般在测试阶 段使用比较多。
5.1 添加依赖
在调用方 pom 文件中引入 ribbon 依赖,需要注意的是如果 pom 中有 Eureka 的依赖,则需要去除 Eureka 的依赖。
<!-- netflix ribbon 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
5.2 配置文件
配置文件中关闭 Eureka,添加直连的服务地址。如果不设置负载均衡策略默认 使用轮询策略。
# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 点对点直连模式,指定具体的 Provider 服务列表,多个用逗号隔开
listOfServers: http://localhost:7070,http://localhost:7071
# 关闭 Eureka 实现 Ribbon 点对点直连
ribbon:
eureka:
enabled: false # false:关闭,true:开启
5.3 访问
关闭 Eureka 注册中心,服务提供者由于无法连接至注册中心所以会报连接异 常。但是服务是可以正常可消费的,所以目前使用的是点对点的方式来进行调用的。
6spring cloud使用ribbon实现负载负载均衡消费
搭建一个ribbon-consumer
pom.xml
<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-starter-actuator</artifactId> </dependency> </dependencies>
application.properties
spring.application.name=ribbon-consumer
server.port=31000
eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/
RibbonConsumerApplication
@SpringBootApplication @EnableDiscoveryClient public class RibbonConsumerApplication { @Bean @LoadBalanced public RestTemplate template() { return new RestTemplate(); } public static void main(String[] args) { new SpringApplicationBuilder(RibbonConsumerApplication.class) .web(WebApplicationType.SERVLET) .run(args); } }
Controller
@RestController public class Controller { @Autowired private RestTemplate restTemplate; @GetMapping("/sayHi") public String sayHi() { return restTemplate.getForObject( "http://eureka-client/sayHi", String.class); } }
RibbonConfiguration
负载均衡的消费策略配置如下
@Configuration public class RibbonConfiguration { @Bean public IRule defaultLBStrategy() { //可以在这里指定负载均衡的消费策略 //return new RandomRule();使用随机的负载均衡消费策略 //return new RetryRule return new RoundRobinRule();//默认的消费策略 } }
以上就是ribbon的简单实现。
测试
使用上一篇文章的两个项目eureka-client和eureka-server两个项目 然后重新在搭建一个eureka-client-ribbon项目。eureka-client-ribbon是和eureka-client代码是一样的只是启动端口不同。
启动
分别启动四个项目。
项目启动的顺序依次是:eureka-serve->eureka-client->eureka-client-ribbon->ribbon-consumer
启动成功后再eureka控制台查看:
说明就启动成功
点击第一下是在30005的eureka-client项目上
点击第二下就跳到了30002的eureka-client-ribbon项目上了
这样就实现了ribbon负载均衡。
原文链接:https://blog.csdn.net/qq_40297844/article/details/109724138
原文链接:https://blog.csdn.net/JanuaryFM/article/details/120854666
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。