springCloud|SpringCloud——Ribbon详解+例子

目录

1、Ribbon
(1)概念
(2)作用
(3)架构图
2、Ribbon案例说明
3、搭建Eureka服务端
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建主启动类
(5)启动Eureka注册中心
3、搭建服务提供者Provider8003
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建启动类
(5)创建controller
4、搭建服务提供者Provider8005(复制8003端口)
(1)点击下方service
(2)复制端口
(3)测试服务Provider8005
【springCloud|SpringCloud——Ribbon详解+例子】5、搭建服务消费者(Ribbon)
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建主启动类
(5)创建配置类配置远程调用
(6)创建controller
6、测试
7、Ribbon自定义负载均衡策略
(1)Ribbon负载均衡策略
(2)添加配置类指定负载均衡策略
(3)修改启动类的Ribbon注解

1、Ribbon (1)概念

Ribbon是实现一套客户端负载均衡的工具,主要功能是提供客户端的软件负载均衡算法和服务调用。
(2)作用
Ribbon是本地负载均衡,在调用微服务接口时,会在服务注册中心获取调用的服务信息,并缓存到本地JVM中,从而在本地实现远程调用。

Ribbon=负载均衡+RestTemplate远程调用
(3)架构图
Ribbon负载均衡默认轮询,即每个服务依次处理请求。
如:有1,2,3,4个请求,服务1处理请求1,3,服务2处理请求2,4
springCloud|SpringCloud——Ribbon详解+例子
文章图片


2、Ribbon案例说明
一个Eureka注册中心,服务消费者consumer8004,服务提供者provider8003,provider8005,服务消费者通过Ribbon轮询调用服务提供者,如下图:

springCloud|SpringCloud——Ribbon详解+例子
文章图片

3、搭建Eureka服务端 (1)创建maven工程
springCloud|SpringCloud——Ribbon详解+例子
文章图片

(2)导入依赖
导入Eureka服务端、web模块依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator

(3)配置application.yml
①服务端口为7001;
②Eureka服务端主机名;
③Eureka客户端:
register-with-eureka:是否在服务中心注册
fetchRegistry:是否可以在注册中心被发现
service-url:服务中心url地址
server: port: 7001eureka: instance: hostname: localhostclient: register-with-eureka: false fetchRegistry: false service-url: defaultZone: http://localhost:7001/eureka

(4)创建主启动类
@EnableEurekaServer:Eureka服务端注解
@SpringBootApplication @EnableEurekaServer public class Eureka7001 { public static void main(String[] args) { SpringApplication.run(Eureka7001.class,args); } }

(5)启动Eureka注册中心
访问http://localhost:7001
springCloud|SpringCloud——Ribbon详解+例子
文章图片

3、搭建服务提供者Provider8003 (1)创建maven工程
springCloud|SpringCloud——Ribbon详解+例子
文章图片

(2)导入依赖
导入Eureka客户端、web模块、监控依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator

(3)配置application.yml
①配置服务端口号为8003;
②配置服务应用名称;
服务消费者指定名称时为该服务应用名称
③配置Eureka注册中心,开启注册,指明注册中心地址。
server: port: 8003spring: application: name: Provider83and85eureka: client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://localhost:7001/eureka

(4)创建启动类
@EnableEurekaClient:指明该服务为Eureka客户端
@SpringBootApplication @EnableEurekaClient public class Provider8003 { public static void main(String[] args) { SpringApplication.run(Provider8003.class,args); } }

(5)创建controller
@Value注解是将值与application.yml配置文件对应值绑定
此处绑定端口号,controller返回端口号。
@RestController public class HelloController { @Value("${server.port}") private String port; @GetMapping("/hello") public String hello(){ return port; } }

4、搭建服务提供者Provider8005(复制8003端口)
由于Provider8003服务和Provider8005服务内容一样,我们可以直接通过复制端口启动8005服务,这就是上方controller为什么返回端口号原因,具体步骤如下:
(1)点击下方service
springCloud|SpringCloud——Ribbon详解+例子
文章图片

若下方没有service,可以到View打开,如下图:
springCloud|SpringCloud——Ribbon详解+例子
文章图片

springCloud|SpringCloud——Ribbon详解+例子
文章图片
springCloud|SpringCloud——Ribbon详解+例子
文章图片

(2)复制端口
-Dserver.port指明复制后的端口号
springCloud|SpringCloud——Ribbon详解+例子
文章图片

springCloud|SpringCloud——Ribbon详解+例子
文章图片

(3)测试服务Provider8005
访问http://localhost:8005/hello
springCloud|SpringCloud——Ribbon详解+例子
文章图片

5、搭建服务消费者(Ribbon) (1)创建maven工程
springCloud|SpringCloud——Ribbon详解+例子
文章图片

(2)导入依赖
导入Eureka客户端、web、监控依赖
注意:Eureka依赖包含Ribbon依赖,所以不用单独引用Ribbon依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator

(3)配置application.yml
①配置服务·端口号为8004;
②配置服务名称为:Consumer8004;
③配置Eureka客户端,开启注册。配置注册中心地址。
server: port: 8004spring: application: name: Consumer8004eureka: client: register-with-eureka: true fetchRegistry: true service-url: defaultZone: http://localhost:7001/eureka

(4)创建主启动类
开启Eureka客户端,Ribbon客户端
指定Ribbon调用服务名称name
@SpringBootApplication @EnableEurekaClient @RibbonClient(name = "PROVIDER83AND85") public class Consumer8004 {public static void main(String[] args) { SpringApplication.run(Consumer8004.class,args); } }

(5)创建配置类配置远程调用
@LoadBalanced:负载均衡注解
@Configuration public class ResConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }

(6)创建controller
①PROVIDER8003:服务提供者的名称,其在注册中心上注册,可以通过该名称找到对应ip地址;
②restTemplate.getForObject(”远程调用服务ip地址“,“调用服务方法返回类型”)
@RestController public class HelloController { //调用服务地址 public static final String url="http://PROVIDER83AND85"; @Autowired RestTemplate restTemplate; @GetMapping("consumer") public String hello(){ return restTemplate.getForObject(url+"/hello",String.class); } }

6、测试
访问:http://localhost:8004/consumer,Ribbon使用轮询方式调用
springCloud|SpringCloud——Ribbon详解+例子
文章图片

springCloud|SpringCloud——Ribbon详解+例子
文章图片


7、Ribbon自定义负载均衡策略 (1)Ribbon负载均衡策略
Ribbon负载均衡策略:
  1. RoundRobinRule 轮询,默认策略。
  2. RandomRule随机
  3. RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
  4. WeightedResponseTimeRule对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
  5. BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  6. AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
  7. ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
(2)添加配置类指定负载均衡策略
此处为随机策略
@Configuration public class MySelfRule {@Bean public IRule myRule(){ return new RandomRule(); //定义为随机 } }

(3)修改启动类的Ribbon注解
springCloud|SpringCloud——Ribbon详解+例子
文章图片



    推荐阅读