Ribbon是什么?
是netflix 开发的基于 客户端 的 负载均衡工具。
Load Balance 负载均衡
HA 高可用
常用的LB ngix LVS
Ribbon的负载均衡方法,除了给我们提供的之外。我们可以自定义
LB 在消费方。 进程内LB
因为是客户端的负载均衡,其实客户端也是在服务端,就是发起者
现在pom中引入第一部
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
第二部,配置类上的配置
@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();
}
}
只有一个注解@LoadBalance
第三部,main启动类配置
@EnableEurekaClient
在controller中将路径改掉
//private static final String REST_URL_PREFIX = "http://localhost:8001";
private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
域名改成微服务名称。 这是因为Ribbon和Eureka 的整合
整个过程就是为了实现这个。
Ribbon默认的负载方式,就是轮询,和图片轮询一样
我们将微服务的提供者也分布式。也即是建立多个一样的。
注册与发现应该就是为了方便管理,集群的目的是可靠
主要修改的是yml文件。一个是端口号。一个是数据库。 端口号的修改是计算机冲突问题,数据库修改,减轻数据库压力。
但是applicationname不能变,因为这三个都是一个功能。
测试顺序
先自己自测
然后通过注册, 再测
客户端 和服务端的理解 对于Eureka来说 ,其他都是客户端, 对于两个服务来说,调用者就是客户端,被吊着就是服务。
Ribbon是从Eureka中找到可用服务,然后轮询,也就是客户端负载。
默认的7种
RoundRobinRule 轮询
RandomRule 随机
如果现在不用默认的用随机
@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();
}
@Bean
public IRule myRule()
{
//return new RoundRobinRule();
//return new RandomRule();//达到的目的,用我们重新选择的随机算法替代默认的轮询。
return new RetryRule();
}
}
就是在配置文件中处理因为主要用的就是RestTemplate这个对象。所以 创建已经实现的对象,随机
@Configuration
public class MySelfRule
{
@Bean
public IRule myRule()
{
//return new RandomRule();// Ribbon默认是轮询,我自定义为随机
//return new RoundRobinRule();// Ribbon默认是轮询,我自定义为随机
return new RandomRule_ZY();// 我自定义为每台机器5次
}
}
如果你想给一个服务自定义负载均衡的机制
我们需要新建一个包。和main包并列
否则,还是全体生效。
package myrule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
@Configuration
public class MySelfRule
{
@Bean
public IRule myRule()
{
//return new RandomRule();// Ribbon默认是轮询,我自定义为随机
//return new RoundRobinRule();// Ribbon默认是轮询,我自定义为随机
return new RandomRule_ZY();// 我自定义为每台机器5次
}
}
main类上添加
@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration= MySelfRule.class)
可以自己定义规则
在源码上改。