核心组件IRULE :
配置在消费者:
注意事项:
@Configuration
public class MySelfRule {
@Bean
public IRule myRule() {
// 定义为随机
return new RoundRobinRule();
}
}
主启动类:
/**
* @author zzyy
* @date 2020/02/18 17:20
**/
@SpringBootApplication
@EnableEurekaClient
//name是服务提供者的yml中的spring.application.name
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
轮询算法:
底层: CAS
比较并交换
上面的都是客户端负载均衡,客户端负载均衡与服务端负载均衡的区别在于客户端要维护一份服务列表,Ribbon从
Eureka获取服务列表,Ribbon根据负载均衡算法直接请求到具体的微服务,中间省去了负载均衡服务器。
与Nginx的区别
Ribbon负责客户端(服务消费者)的负载均衡,而Nginx负责的是服务端的负载均衡。
Ribbon的负载均衡:
- 随机
- 轮询
- 按响应时间做权重进行访问
- 如果失败了就在指定时间内重试
- 默认规则 符合判断service所在区域的性能和service的可用性来选择服务器
RestTemplate 是远程调用Http的工具,是对java底层http的封装,使用RestTemplata用户可以不再关注底层的连接建立,并且RestTemplata不仅支持Rest规范,还可以定义返回值对象类型。
RestTemplata支持本地负载均衡,配合Ribbon一起使用