5、Spring Cloud Ribbon
1.Ribbon简介
(1).Ribbon介绍
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
(2).Ribbon作用
Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡(LB)的工具。
LB(负载均衡):集中式LB和进程内LB。
集中式LB:即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;
|
F5:https://baike.baidu.com/item/F5%E6%96%B9%E6%A1%88/1121377?fr=aladdin |
进程内LB:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
官方文档:
https://github.com/Netflix/ribbon/wiki
https://github.com/Netflix/ribbon/wiki/Getting-Started
2.Ribbon配置
修改microservicecloud-consumer-dept-80工程
(1).修改pom.xml文件
修改部分:
|
<dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-eurekaartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-ribbonartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-configartifactId> dependency> dependencies> |
完整部分:
|
<?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>microservicecloudartifactId> <groupId>com.hosystemgroupId> <version>1.0-SNAPSHOTversion> parent> <modelVersion>4.0.0modelVersion>
<artifactId>microservicecloud-consumer-dept-80artifactId>
<dependencies> <dependency>
<groupId>com.hosystemgroupId> <artifactId>microservicecloud-apiartifactId> <version>${project.version}version> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency>
<dependency> <groupId>org.springframeworkgroupId> <artifactId>springloadedartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-devtoolsartifactId> dependency>
<dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-eurekaartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-ribbonartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-configartifactId> dependency> dependencies>
project> |
(2).修改application.yml
追加eureka的服务注册地址。
修改部分:
|
eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ |
完整部分:
|
server: port: 80
eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ |
(3).修改ConfigBean.java
对ConfigBean进行新注解@LoadBalanced,获得Rest时加入Ribbon的配置;
|
package com.hosystem.springcloud.cfgbeans;
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate;
@Configuration public class ConfigBean //boot ---> spring applicationContext.xml === @Configuration配置 ConfigBean = applicationContext.xml { @Bean @LoadBalanced //Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 public RestTemplate getRestTemplate() { return new RestTemplate(); } }
//applicationContext.xml ---> @Configuration public class ConfigBean {} //
(5).修改DeptController_Consumer.java修改DeptController_Consumer客户端访问类
(6).启动eureka、provider、consumer先启动3个eureka7001、eureka7002、eureka7003集群后,再启动microservicecloud-provider-dept-8001并注册进eureka,最后启动microservicecloud-consumer-dept-80。
(7).测试
(8).总结Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号 3.Ribbon负载均衡(1).Ribbon架构介绍
Ribbon在工作时分成两步:第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。 (2).创建provider8002、provider8003[1].创建工程provider8002[2].创建工程provider8003(3).配置pom文件[1].配置provider8002 pom文件
[2].配置provider8003 pom文件
(4).配置yml文件修改的地方有端口、数据库链接、实例id(instance-id);对外暴露的统一服务实例名一定不能修改(name: microservicecloud-dept) [1].配置provider8002 yml文件
[2].配置provider8003 yml文件
(5).配置主启动类[1].DeptProvider8002_App
[2].DeptProvider8002_App
(6).创建数据库database8002、database8003新建8002/8003数据库,各自微服务分别连各自的数据库。 [1].创建database8002
[2].创建database8003
(7).启动eureka、provider、consumer启动3个eureka集群配置区,在启动provider后,我们需要随便打开一个eureka看provider是否都注册上了。
启动3个provider微服务并各自测试通过
启动microservicecloud-consumer-dept-80
(8).访问Dept微服务客户端通过Ribbo完成负载均衡并访问上一步的Dept微服务
注意观察看到返回的数据库名字,各不相同,负载均衡实现 (9).总结Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。 4.Ribbon核心组件
(1).查看IRle接口(2).查看IRleILoadBalancer接口(3).查看AbstractLoadBalancer接口(4).使用RandomRule算法修改consumer-dept-80的ConfigBean.java.
|