SpringCloud系列——Ribbon 负载均衡
前言
Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制。我们在上篇(猛戳:SpringCloud系列——Feign 服务调用)已经实现了多个服务之间的Feign调用,服务消费者调用服务提供者,本文记录Feign调用Ribbon负载均衡的服务提供者
GitHub地址:https://github.com/Netflix/ribbon
服务提供者
服务提供者有两个,实际上可以看做只有一个,因为这两个只有端口不同
maven引入Ribbon
<!-- Ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
创建RibbonConfig文件,主类添加@RibbonClient(name = "RibbonConfig", configuration = RibbonConfig.class),我这里偷懒,直接在主类中创建内部类
@EnableEurekaClient
@RibbonClient(name = "RibbonConfig", configuration = RibbonConfig.class)
@SpringBootApplication
public class SpringbootSpringdataJpaApplication{ public static void main(String[] args) {
SpringApplication.run(SpringbootSpringdataJpaApplication.class, args);
}
} @Configuration
class RibbonConfig { @Bean
public IRule ribbonRule(){
return new RandomRule(); //分配策略:随机选择一个server
// return new BestAvailableRule(); //分配策略:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略
// return new RoundRobinRule(); //分配策略:轮询选择,轮询index,选择index对应位置的server
// return new WeightedResponseTimeRule(); //分配策略:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低
// return new ZoneAvoidanceRule(); //分配策略:复合判断server所在区域的性能和server的可用性选择server
// return new RetryRule(); //分配策略:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
} @Bean
public IPing ribbonPing() {
return new PingUrl();
} @Bean
public ServerListSubsetFilter serverListFilter() {
ServerListSubsetFilter filter = new ServerListSubsetFilter();
return filter;
} }
下表显示了Spring Cloud Netflix默认为Ribbon提供的bean:

官网例子:

PS:我们启动的时候有可能会碰到这个问题或类似的问题,说我们注入的某个bean对象有重名,叫我们改名或启用覆盖

这个是ribbonRule跟txlcn框架的重名了,我们这里进行改名就能解决问题

我们添加一个测试接口
@RestController
@RequestMapping("/user")
public class UserController { @RequestMapping("/ribbon")
public String ribbon() {
return "springdatejpa -- 我的端口是:10088";
} }
第二个服务提供者也是这样配置,注意:应用名要相同(spring.application.name=springdatejpa);端口不同;
服务消费者
服务消费者使用Feign调用,无需做任何修改,Feign已经使用Ribbon。具体配置请戳:SpringCloud系列——Feign 服务调用
@FeignClient(name = "springdatejpa", path = "/user/")
public interface MyspringbootFeign { @RequestMapping("/ribbon")
String ribbon();
}
/**
* feign调用
*/
@GetMapping("feign/ribbon")
String ribbon(){
return myspringbootFeign.ribbon();
}
效果
启动所有项目,我们注册了三个服务,其中:
有两个服务名称相同、处理的业务相同、端口不同,这两台作为服务提供者(可看做是一个“小集群”);
另一个是服务消费者(Feign调用);

消费者不断调用,Ribbon会从注册中心的服务列表拉取实例集合进行负载均衡调用背后的服务提供者

后记
Ribbon负载均衡已经可以实现,更多配置请看官方文档
代码开源
代码已经开源、托管到我的GitHub、码云:
GitHub:https://github.com/huanzi-qch/springCloud
码云:https://gitee.com/huanzi-qch/springCloud
SpringCloud系列——Ribbon 负载均衡的更多相关文章
- spring-cloud配置ribbon负载均衡
spring-cloud配置ribbon负载均衡 ribbon提供的负载均衡就是开箱即用的,简单的不能再简单了 为了顺利演示此demo,你需要如下 需要提前配置eureka服务端,具体看 https: ...
- 浅谈SpringCloud (三) Ribbon负载均衡
什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力. 我们 ...
- SpringCloud:Ribbon负载均衡
1.概述 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客 ...
- 四(2)、springcloud之Ribbon负载均衡
2.Ribbon负载均衡 Ribbon在工作时分成两步第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server. 第二步再根据用户指定的策略,在从server取到的 ...
- Spring-cloud之Ribbon负载均衡的使用及负载均衡策略配置(与Eurka配合使用)
什么是Ribbon,ribbon有什么用,个人先总结一下(不正确请提出讨论):Ribbon是基于客户端的负载均衡器,为我们提供了多样的负载均衡的方案,比如轮询,最小的并发请求的server,随机ser ...
- SpringCloud之Ribbon负载均衡及Feign消费者调用服务
目的: 微服务调用Ribbon Ribbon负载均衡 Feign简介及应用 微服务调用Ribbon Ribbon简介 1. 负载均衡框架,支持可插拔式的负载均衡规则 2. 支持多种协议,如HTTP.U ...
- SpringCloud之Ribbon负载均衡配置
一.负载均衡解决方案分类及特征 业界主流的负载均衡解决方案有: 1.1 集中式负载均衡 即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责 ...
- Spring-Cloud之Ribbon负载均衡-3
一.负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式.一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix .另一种是将负载均衡逻辑以代码的形式封装到服 ...
- 第六章 SpringCloud之Ribbon负载均衡
###################使用默认的负载均衡(轮询)############################# 1.pom.xml <?xml version="1.0&q ...
随机推荐
- mysql_Navicat数据库破解
Navicat Premium 12.1.16.0安装与激活 Navicat Premium 12是一套数据库开发管理工具,支持连接 MySQL.Oracle等多种数据库,可以快速轻松地创建.管理和维 ...
- 详谈kafka的深入浅出
第一:kafka的介绍,kafka官网:http://kafka.apache.org/ http://www.jasongj.com/2015/03/10/KafkaColumn1/ kafka的简 ...
- SpringAop注解实现日志的存储
一.介绍 1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封 ...
- Python3定时短信获得天气
getWeather 脚本链接:https://github.com/Mrlshadows/getWeather Python环境为 python3 两个API 注册后即可使用免费版本的服务 心知天气 ...
- LoadRunner(一)——性能测试基础及性能指标概述
参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.典型的性能测试场景 某个产品要发布了,需要对全市的用户做集中培训.通常在进行培训的时候,老师讲解完成一个业务以后,被培训用 ...
- C语言面试题分类->回调
本文主要讲解如果实现回调,特别是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此 ...
- tag cloud的相关资料
http://reverland.org/python/2013/01/28/visualize-your-shell-history/ https://github.com/reverland/sc ...
- Lesson 28 No parking
Text Jasper White is one of those rare people who believes in ancient myths. He has just bought a ne ...
- 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)
第9章 RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...
- 【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现
第14章 uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任 ...